Meu projeto de hobby é um
registrador GPS . Os comentários até sugeriram chamá-lo de “Computador de Viagem”, como O registro é apenas uma pequena parte de todos os recursos do dispositivo. Muito já foi implementado, mas a maioria ainda precisa ser feita.
Nos artigos anteriores, descrevi a
transição do arduino para o STM32 ,
STMCube / HAL ,
falei um pouco sobre o sistema de compilação , o
gerenciador de inicialização ,
construí um dispositivo USB composto e
aumentamos sua velocidade . Tudo isso foi feito em uma placa de
ensaio baseada na
placa Blue Pill STM32F103CB e em um ouriço de fios. Chegou a hora do dispositivo tomar forma, tanto eletrônica (circuito) quanto física (corpo).

Os problemas que tive que resolver nesta fase estão muito interconectados. Ao escolher componentes para um projeto, você precisa imaginar aproximadamente em qual alojamento eles podem ser inseridos. E vice-versa, o caso deve ser feito para os componentes disponíveis e as placas, que, novamente, precisam ser feitas de olho no gabinete. Em geral, um emaranhado de questões interconectadas. Você pode, é claro, pegar uma caixa maior e empurrar qualquer coisa para lá, mas queria algo compacto e leve.
Antes de começar imediatamente, quero observar que essa não é a versão final do dispositivo. Provavelmente haverá erros no esquema, algo não funcionará como pretendido, nos comentários eles indicarão soluções mais corretas, algumas abordagens serão repensadas. Eu acho que a segunda ou até terceira versão do dispositivo não pode ser evitada. Portanto, terei prazer em seus comentários construtivos.
Sob o corte, ele tem várias contas, mas será de engenharia.
O que e porque
O registrador GPS Holux M241 é meu fiel companheiro em todas as viagens. Ele está comigo há muitos milhares de quilômetros. A faixa que o registrador grava é usada principalmente para geotagging de fotos, mas a rota em si também é interessante. É divertido descobrir a rapidez com que você foi esquiar, qual rota o seu avião voou, que visão apenas brilhou do lado de fora da janela do ônibus.
Aqui eu fiz uma pequena revisão deste dispositivo.
Infelizmente, há muito que os recursos deste dispositivo não me agradam: estou cansado de mexer com baterias que sempre ficam no momento mais inoportuno. Também existe uma velocidade USB muito baixa, uma pequena quantidade de flash interno, um mecanismo inconveniente para mesclar trilhas, pouca informação está disponível no visor, baixa precisão, um odômetro muito primitivo, nenhuma informação sobre satélites e muito mais.
Sim, pode-se procurar o que os rastreadores modernos oferecem - com certeza já existe um dispositivo à venda que atende aos meus requisitos. Mas isso é um hobby, quero tentar fazer algo complexo, interessante, útil e necessário. Deixe estar, mesmo que eu o use.
O objetivo do projeto como um todo é criar um dispositivo semelhante em algo, apenas recheado com a minha lista de desejos.
No primeiro artigo da série, detalhei meus requisitos para o dispositivo. Em resumo, eu gostaria de fazer o seguinte:
- Recicle o sistema de energia, transfira para uma bateria de lítio
- colocar uma exibição mais informativa
- GPS mais preciso
- expanda o flash com cartão SD
- adicione bússola e acelerômetro
- Também quero redesenhar o sistema de registro para cuspir faixas no formato necessário.
Além dos requisitos técnicos e da lista de desejos, também existem requisitos não técnicos (não funcionais). Então, eu gostaria de criar dispositivos complexos a partir do zero, para descobrir como vários componentes eletrônicos funcionam, como programá-los, como criar uma placa e projetar um gabinete.
Por que você precisa de um dispositivo separado se todos os telefones modernos têm GPS, uma tela grande e muita memória? Bem, primeiro de tudo, não tenho certeza de que um telefone com GPS ligado no modo de gravação de faixa possa suportar o dia inteiro. Eu realmente não gostaria de ficar em um país desconhecido sem telefone. Além disso, eu pessoalmente uso um dispositivo separado é simplesmente mais confortável.
Talvez com o tempo, o conceito do dispositivo mude. Então, por exemplo, agora está se tornando cada vez mais lógico abandonar a tela e conectar-se ao telefone via bluetooth, e fazer todos os truques lógicos no telefone. Essa ideia é muito robusta e tentadora. Mas, nesta fase, eu ainda gostaria de ter uma exibição - sempre tenho tempo para abandoná-la.
Durante o primeiro ano e meio, desenvolvi o dispositivo em vários tipos de placas de depuração (primeiro arduino nano, depois STM32F103 comprimido azul, depois STM32F407VE). Eu tive que conectar periféricos na fiação e adquiri os módulos. Como resultado, um ouriço feito de fios apareceu em cima da mesa, o que não funcionou para testar a recepção do GPS na rua - às vezes você nem conseguia mover os fios sem interromper a conexão em algum lugar. E, em seguida, depuração feliz.
Toda vez, sentado para escrever funcionalidades úteis, me deparava com o fato de que alguma outra parte do sistema parou de funcionar normalmente e tinha que passar horas depurando algo completamente não relacionado. Por exemplo, o componente mais importante do sistema - o receptor GPS - acabou sendo o menos desenvolvido, porque Eu tive que partir para depurar USB, cartões SD, configurar bibliotecas e assim por diante.
Finalmente, me cansei disso e decidi fazer minha placa de depuração - este será o tópico do artigo de hoje. Os objetivos que estabeleci para mim nesta parte do projeto foram os seguintes:
- Faça uma placa de depuração que não terá problemas com componentes sem contato
- Decidir sobre as principais soluções técnicas e esquemáticas
- Decida sobre os componentes que usarei a seguir
- Decida aproximadamente sobre o layout e o corpo
- O circuito deve ser geral o suficiente para poder experimentar diferentes componentes e seus modos
E embora o objetivo final seja um dispositivo de bateria compacto, hoje não farei coisas como
- modos de potência de ajuste fino
- configuração de consumo
- modos de sono
Lidarei com a configuração de consumo quando a placa e o código principal estiverem prontos. A propósito, o código de hoje também não será, mas voltarei definitivamente a essa pergunta, pois haverá material interessante o suficiente.
Componentes
Vamos começar com os componentes e periféricos. Ao longo do caminho, estimaremos o número de pernas do microcontrolador necessárias para conectar este zoológico, bem como os parâmetros de potência. Porque é um projeto de hobby que escolhi componentes do que realmente posso comprar nas lojas / ebay / ali e também do que pode ser soldado em casa (bem, também do que já estava em meus suprimentos pessoais). Talvez alguns microcircuitos específicos possam resolver o problema melhor, mas a questão da acessibilidade e preço é importante para mim.
- O principal componente de um registrador GPS, é claro, será um receptor GPS . No meu caso, este é um Beitian BN-880 bastante complicado, baseado no chip UBlox M8N. A bússola no chip HMC5883L também está integrada no módulo.
Conexão: UART de 2 pinos para GPS e I2C de 2 pinos para bússola
Fonte de alimentação: De 2.7V
Consumo: 50mA
- Também encomendou um módulo Beitial BN-220 . Não possui bússola, mas a antena é mais compacta (20x20mm versus 30x30). Ainda não está claro como isso afetará a qualidade da recepção. Precisa testar. Mas, a julgar pela folha de dados, este módulo pode funcionar a partir de 1.4V, o que deve ter um efeito positivo no tempo de operação do dispositivo.
- Aqui, de fato, tudo está de alguma forma enlameado. Parece que o BN-880 é baseado no UBlox M8N, enquanto o BN-220 é baseado no U-blox M8030-KT. Mas em algumas fontes, parece que parece ser a mesma coisa. Mais precisamente, o M8N é um módulo e o M8030-KT é um chipset interno. Estou preocupado com o problema de energia nessa confusão - o M8N é anunciado a partir de 2.7V, enquanto o M8030-KT é de 1.4V.
- Como alternativa, também tenho o módulo SIM868 por aí . em que, além do GPS, há também um módulo GSM / GPRS e Bluetooth. Enquanto assusta com sua complexidade e dificuldade de conexão. Você precisará jogar com o quadro de depuração primeiro.
- A principal diferença entre o dispositivo e "apenas uma caixa preta" é a presença de uma tela . Nos primeiros protótipos, conectei o monitor via I2C, mas a carga do barramento foi de cerca de 25%. Mas o ponto nem está na proporção percentual, mas no fato de a transferência do buffer de tela demorar cerca de 25ms, durante os quais é impossível se comunicar com outros dispositivos no barramento. Isso pode ser um problema, portanto, é necessário colocar o monitor em um barramento I2C separado ou considerar a conexão via SPI
Conexão: 2 fios I2C ou 3 fios SPI (exibição somente para gravação, portanto a linha MISO não é usada, mas um sinal de dados / comando separado é usado)
Fonte de alimentação: 3V
Consumo: 25mA
- Para controlar o dispositivo, usarei 2 botões que ocupam 2 pernas do processador, respectivamente
- No dispositivo original (Holux M241, do qual copiei originalmente a funcionalidade), era impossível assistir a faixa em um ponto arbitrário no tempo. Era necessário conectar o dispositivo ao computador e mesclar os dados com um programa especial. Parece-me que a capacidade de assistir a uma faixa em um telefone celular ou tablet a qualquer momento será muito popular. Para isso, comprei um módulo Bluetooth HM-13 . Este módulo é selecionado porque possui SPP além do BLE.
Conexão: 2 fios UART, 1 fio de status (conectado / não conectado)
Fonte de alimentação: 2.5V - 3.9V
Consumo: 50mA (embora a figura 13mA esteja ao lado da folha de dados. Talvez este seja o valor médio e de pico)
- Como me disseram, não faz sentido manter o receptor ligado se você apenas se sentar para descansar ou jantar em um café. Portanto, decidi adicionar o acelerômetro MMA8452 e usá-lo para determinar se o dispositivo está em repouso ou se estamos nos movendo para algum lugar.
Conexão: 2 fios I2C, 1 fio para interrupção
Fonte de alimentação de 2V a 3.6V com algum consumo microscópico
- A faixa do GPS será gravada no cartão SD . Eu já tentei usar o cartão no modo SPI e isto é, para dizer o mínimo, lento. Especialmente no registro. Modo correto para cartão SD - SDIO
Conexão: 6 fios
Fonte de alimentação: From 1.8V
O consumo é desconhecido, mas acho que não mais que 20mA
- Para economizar energia, faz sentido desligar a energia dos dispositivos que não estão em uso no momento. Tão perto de cada consumidor, colocarei um transistor , que controlarei um sinal separado do microcontrolador
Conexão: 5 sinais, um pé por consumidor (GPS, Bluetooth, acelerômetro, cartão SD, tela)
UPD com base em comentários. Desabilitar o acelerômetro não faz sentido - ele já consome um centavo. É provável que alguns dispositivos sempre funcionem (por exemplo, um cartão SD) - no futuro poderei remover esses transistores. Alguns dispositivos (como GPS) podem desconectar-se sob comando da interface. Se, de acordo com os resultados do teste, esta parte funcionar bem - eu também recusarei um transistor externo. Enquanto isso, estou fazendo a taxa total máxima possível, deixe esses transistores serem todos. Além disso, ainda não decidi sobre a periferia. - Um LED de duas cores para exibição de status (que tal sem um LED piscando?). Seria possível colocar um tricolor, mas até agora não vejo a necessidade.
Conexão: 2 pinos
Consumo: 10mA
- Além do Bluetooth, um mecanismo mais clássico para mesclar faixas será implementado - via USB . Para isso, serão envolvidas 4 linhas - um par diferencial para dados, 1 pino para detectar que o dispositivo está conectado ao USB e outro pino para conexão lógica (por que eu preciso desses 2 pinos que descreverei abaixo)
- O apetite vem com a comida. Desde que comecei a enfiar tudo no dispositivo dos meus sonhos, por que não adicionar um tweeter ? Bem, ou um motor de vibração . Ainda não criei um caso de usuário.
Conexão: 1 fio
- O dispositivo ainda precisará estar ligado. Enquanto o chip PT1502 está me olhando como um carregador de bateria de lítio e um controlador de energia . Para se comunicar com o microcircuito, você precisará usar 2 fios: um para gerenciamento de energia e outro para um sinal de bateria descarregada. Por uma questão de interesse, será possível medir a tensão da bateria usando outra linha.
- Obviamente, a carga de uma bateria de lítio é incorreta para medir com base na tensão. Portanto, adicionei um chip especial para medidor de potência INA219
Tensão de alimentação: 3-5V, recomendo 3.3V
Conexão: 2 fios I2C
Como será visto abaixo, uma tensão de alimentação de 3V cria algum desconforto na conexão. Eu preferiria que o contador do chip fosse alimentado a partir de 2.7V ou inferior. Mas depois de passar por várias opções com base no preço / caixa / disponibilidade, ainda não encontrei nada em 2,7V. Serei grato pela ajuda.
- Resta apenas fornecer uma interface de depuração SWD (3 fios) e um UART de depuração (mais 2 fios)
Eu sempre estava interessado na questão de por que são necessários controladores com um grande número de portas e contei facilmente 39 patas necessárias para a minha funcionalidade. E isso não está contando quartzo, redefinição e potência. E existem idéias para o que fazer com uma dúzia a mais (por exemplo, o monitor pode ser conectado via interface paralela Intel 8080 ou Motorola 6800).
Obviamente, você pode parafusar os extratores da porta I2C para reduzir o número de pernas usadas. Mas em primeiro lugar, esses são componentes adicionais na placa, em segundo lugar, a parte do software se torna muito mais complicada e, em terceiro lugar, pequenos microcontroladores ainda têm pouca memória e, onde há memória suficiente, há também portas suficientes. Portanto, não vejo motivo para complicar tudo - que haja 39 linhas.
Nutrição
Com a fonte de alimentação, nem tudo é tão claro. Provavelmente, você pode alimentar todos os dispositivos de 3,3V e se acalmar. Mas nós, no entanto, vamos fabricar um dispositivo móvel, o que significa que precisamos pensar em economizar energia. Então você precisa tentar escolher uma tensão de alimentação menor. Abaixo, vou estimar que tipo de economia você pode tentar alcançar.
Aqui estão os dados para todos os dispositivos na placa - desta forma, é mais conveniente escolher o domínio de energia ao qual conectar este ou aquele dispositivo.
A partir da placa, é fácil ver que alguns dos dispositivos podem operar com voltagens suficientemente baixas (de 1,8V). Outros podem trabalhar confortavelmente a partir de 2.7V. Finalmente, os dispositivos restantes abaixo de 3V não podem funcionar. O squeaker, para o bem, geralmente precisa de 5V, mas para mim será alimentado pela tensão mais alta - a partir da bateria, não importa quanto ela seja.
Com o poder da tela ainda não está totalmente esclarecido. Na descrição dos módulos de exibição com ali, a faixa é de 3 a 5V, enquanto na folha de dados do controlador de matriz SSD1309 a faixa é de 1,65 a 3,3V. Presumo que seja necessário 3V para girar o conversor de impulso na placa do módulo de exibição, enquanto 1,65V é suficiente para a lógica. Como será visto nas discussões sobre o layout, faz sentido abandonar o módulo da tela e conectar a tela diretamente, o que alimentará a tela a partir do domínio 2B.
Tenho o mesmo raciocínio sobre o GPS - fontes diferentes indicam tensões de alimentação diferentes. Até o momento, não compreendo qual módulo utilizarei no final, então deixe o receptor sair no domínio de 2,7V.
Com um cartão SD, não está nada claro. A especificação diz obscuramente que, em geral, o cartão deve ser alimentado a partir de 3,3V, mas os cartões modernos são inteligentes o suficiente e podem entender que estão presos em um dispositivo de baixa tensão e podem mudar para 1,8V. Mas o mecanismo para escolher alimentos não é muito claro. Vou alimentar o cartão de 2B e ver o que acontece. Não vai funcionar - vai funcionar a partir de 3V.
Assim, 4 barramentos de potência aparecem - 2V, 2.7V, 3V e uma bateria. Gostaria de colocar todos os consumidores que estão comendo e trabalhando constantemente (e este é o controlador e o GPS) no barramento de menor tensão, mas no momento ainda não decidi sobre o módulo GPS (e, portanto, sua fonte de alimentação - 2 ou 2,7V), o que significa que será necessário algum tipo de solução universal. Vou tentar separar a placa para que seja fácil aplicar uma ou outra tensão.
De onde você tira tantas tensões diferentes? Mesmo nos estágios iniciais do projeto, observei o microcircuito PT1502 e até
consegui experimentá-lo em outro projeto . Além do carregador para a bateria de lítio, este microcircuito possui até 3 fontes de energia - um pulso e 2 comutadores lineares. Aqui, no entanto, a tensão não é regulada em um deles e é de 3V - tentarei alimentar o INA219 a partir dele. As 2 fontes de energia restantes não são um problema, porque Lá você pode escolher a voltagem.
A estimativa de consumo não é muito bem sucedida. O pico de consumo é indicado nas folhas de dados - isso é suficiente para calcular a potência dos principais transistores, mas não o suficiente para estimar a capacidade necessária da bateria. Por enquanto, selecionarei a bateria com base no espaço disponível no gabinete e já medirei o consumo real.
A questão pode surgir, mas como combinar dispositivos com tensões operacionais diferentes? Vamos acertar.
- Five Volt Tolerant ( UART2 PA2/PA3), 3.3
- 2, . — MMA8452Q ( “” )
- SD , , .
- GPS Bluetooth “” . “”
Finalmente, algumas palavras sobre o motivo de eu estar lutando pela redução da tensão de alimentação. Um chip em um conversor DC-DC pulsado, que pode trocar volts por amperes (se você não levar em conta as perdas do próprio conversor, é claro). Para ser mais preciso, troque uma tensão mais alta por uma corrente mais baixa por uma tensão mais baixa e uma corrente mais alta. Nesse caso, estamos mais interessados no raciocínio reverso - se você alimentar uma carga de baixa tensão através de DC-DC, o consumo de corrente de toda essa estrutura juntamente com o conversor será menor que o consumo de corrente da própria carga. Bem, como a capacidade da bateria é medida em mAh, a redução do consumo atual aumentará a vida útil da bateria.Conde?, 90%, DC-DC . . , DC-DC .
. 900 4.1 3.5 ( ). DC-DC 90% ( ). 100. .
, 900 100 9 . — 9.3 3.3, 11.4 2.7, 15 2. , , , .
Microcontrolador
Abordei a questão de escolher um microcontrolador, pensativo - brinquei com o configurador por um longo tempo, ponderando os prós e os contras de cada uma das opções. Eu realmente gostei dos microcontroladores STM32, por isso não vejo o ponto de olhar na direção de outros controladores sem necessidade especial. Além disso, na linha STM32 existem controladores para todos os gostos e para qualquer periferia. A experiência adquirida nas etapas anteriores do meu projeto nos permite restringir a escolha do controlador com base na lista de periféricos, ligações de software já escritas, bem como nos recursos que eu gostaria de implementar no futuro.Portanto, é óbvio que 20kb de memória do meu STM32F103CB são definitivamente pequenos - não há buffers de tamanho decente suficientes para se comunicar com um cartão SD e USB. Eu nem comecei a implementar grande parte da funcionalidade planejada, mas ela já levou mais de 19kb. Mas com o poder de processamento, como se viu, isso não é particularmente necessário. Se toda a comunicação com periféricos for inserida no DMA, apenas alguns por cento permanecerão no compartilhamento do processador central.Tendo estimado a lista do que preciso do controlador, calculei o seguinte:- > = 128kb flash (atualmente são usados cerca de 50k)
- > = 40 kb de memória (agora são tirados 19k)
- > = 40 pés de GPIO (veja o raciocínio acima)
- > = 40MHz (você não precisa de muito, o principal é ter menos consumo)
- DMA (eu realmente gostei)
- > = 2x I2C,> = 3x UART,> = 1 SPI
- SDIO (a unidade flash através do SPI é muito lenta)
- USB Full Speed, High Speed
- ( )
- LCD ( FSMC)
Os microcontroladores STMicroelectornics são apenas uma moeda de dez centavos - para todos os gostos, cores e carteiras. No começo, tentei escolher um controlador para prosseguir com a série. As réguas L0 e F0 são muito fracas e não há memória suficiente, S7 e H7, pelo contrário, são muito chiques, não há SDIO em L4 (UPD: SDIO é, eles simplesmente não o mencionaram na página de título da série). Entre o restante da série, você pode escolher algo com base nas minhas necessidades, pois não tenho requisitos específicos.A série STM32WB impressiona com a presença do Bluetooth, mas o gabinete VFQFPN68 esfria um pouco o desejo de usá-lo em projetos de hobby. E eu não encontrei esses controladores no varejo.Apontei para o gabinete LQFP64 - suficiente no número de pernas, mas não muito grande ao mesmo tempo e pode ser soldado em casa. É bom que exista um configurador CubeMX onde você possa selecionar o que precisa com filtros.Optei pelo controlador STM32F103RB por três razões. Primeiro, eu já estudei bem a série F103 com o quadro Blue Pill. Em geral, o controlador STM32F103CB me convinha completamente, apenas a memória não era suficiente. Em segundo lugar, eu já tenho um gerenciador de inicialização e um código de baixo nível para este controlador, enquanto outros precisarão ser refeitos. E em terceiro lugar, há cerca de um ano, eu já estava feliz em comprar 3pcs STM32F103RB. Então, não fiz um estudo detalhado dos controladores disponíveis, mas simplesmente peguei um controlador mais grosso da linha F103. Não jogue fora agora :)Como já observei, não tenho requisitos específicos de desempenho ou periféricos. Mas se eu encontrar algo, lembre-se de que já tenho controladores da linha F4 (se algo mais poderoso for necessário) ou L152RD, se você precisar decidir algo com consumo (UPD: eu também olhei para L433RC). O que agrada, com o STM32, quase todos os controladores de pino a pino são compatíveis, e F4 e L1 / L4 podem ser soldados quase sem alterar a placa. Você pode até coletar e comparar o consumo com diferentes MKs.Algumas palavras sobre o corpo e o layout
Decidimos os detalhes. É hora de desenhar um diagrama, traçar o quadro e tentar encaixá-lo no estojo. Ou não? Para admitir, no começo eu apenas segui esse caminho, mas depois cheguei à conclusão de que tudo precisa ser feito na ordem inversa. Bem, ou pelo menos ao mesmo tempo.
Eu gostaria de obter um dispositivo compacto. Para isso, é necessário entender com precisão o tamanho do espaço disponível, por sua vez, para entender onde colocar a placa e seu tamanho, qual o tamanho da bateria, onde colocar os botões, a tela, o conector USB e outros componentes externos, além de descobrir como montar os componentes e você pode se é conveniente colocar fios entre eles. É simplesmente inútil começar a levantar um quadro sem entender todas essas coisas. Acontece que você precisa primeiro lidar com o corpo e o layout e depois seguir para o circuito.
Além disso, no processo de desenhar o caso, tive que revisar a seleção de componentes várias vezes. Então, inicialmente, pensei em usar uma
tela barata de 128x64 de 0,96 ” (área de trabalho 21,7 x 11,2 mm), mas essa tela parecia completamente microscópica no fundo de uma caixa muito maior. Em seguida, foi encomendada
uma tela de 1,3 " (área de trabalho 29,4 x 14,7 mm), mas não ficou muito melhor. Então, obtive
uma tela de 1,54 ” (35 x 17,5 mm) - parece mais ou menos normal com ela. Esta é atualmente a principal opção de trabalho.
De acordo com as estimativas, uma tela de 1,8 ”-2” teria parecido melhor, mas elas já vêm em cores e com resolução mais alta e, portanto, o buffer da tela será grande o suficiente para o meu controlador (35kb em vez de 1kb). Bem, inserir telas grandes no gabinete também pode ser um problema, porque os suportes de aterrissagem para esses módulos são significativamente maiores que a área ativa da tela.
Enquanto eu escrevia este artigo em todos, os
monitores monocromáticos de 2,42 " apareceram com a mesma resolução (128x64) e exatamente a mesma encadernação de 1,54". Encomendei um para o meu teste - há uma chance de colocá-lo no meu caso sem um aumento significativo no dispositivo.
Outro ponto significativo na fase de trabalho do gabinete foi o entendimento de que o módulo de tela adquirido ocupa muito espaço e reduz significativamente o espaço da placa principal. Portanto, decidi abandonar o módulo de exibição final e, em vez disso, coloquei a exibição e sua ligação na minha placa. O número de peças no circuito aumentou um pouco, mas o design como um todo foi significativamente simplificado e tornou-se mais compacto.
Eu tenho pensamentos semelhantes sobre o tópico do módulo GPS. Não é tão grande, mas não importa o tamanho ou a interferência, ou a antena está fechada por alguma bateria. Pode ser uma boa ideia colocar o recheio do módulo na sua placa e colocar a antena em outro lugar.
O trabalho no gabinete também possibilitou determinar o tamanho e a capacidade da bateria. No volume disponível, uma bateria de 900mAh foi encontrada - vamos nos concentrar nela. Gostaria que meu dispositivo funcionasse com uma bateria de 15 a 20 horas, o que significa que o consumo deve estar no nível de 45-60mA.
No momento, não posso terminar o trabalho no casco. Em primeiro lugar, a questão da escolha de alguns componentes (tela, GPS) ainda está em aberto. Em segundo lugar, não está claro se meu circuito começará em princípio ou se será necessário mudar radicalmente alguma coisa. E, em terceiro lugar, a placa é compacta demais - não tenho certeza de que posso dissolvê-la, solda e depurá-la. Portanto, neste artigo ainda vou me concentrar em questões de circuitos, seguirei em etapas mais simples e compreensíveis e falarei sobre o caso na próxima vez. Aqui você tem algumas renderizações e fotos para sementes.




Esquema
Agora você pode fazer eletrônicos. Descreverei as soluções de circuitos com detalhes suficientes. Primeiro de tudo, para os mesmos recém-chegados em eletrônica que eu sou, bem como uma sinopse para mim. Engenheiros eletrônicos experientes podem percorrer os circuitos e retroceder para a próxima seção.
Vamos começar com nutrição.
O dispositivo será alimentado por uma bateria de lítio, o que significa que você precisa de um controlador de carregamento. Além disso, alguns componentes têm um limite superior de tensão de cerca de 3,6V, enquanto uma bateria pode facilmente acabar com mais de 4V. Então, você precisa de uma fonte de energia reduzida. Como já descobrimos, precisaremos de várias tensões diferentes.
Eu já mencionei que vou usar o chip PT1502. Cabe bem, porque implementa um controlador de carregamento, 3 fontes de energia e um circuito de dispositivo de comutação de botão. O microcircuito contém vários blocos funcionais, que dividi no diagrama para maior clareza. O circuito em si é um circuito de folha de dados ligeiramente revisado. Aqui está o controlador de carga da bateria de lítio

O resistor R3 define a corrente de carga. Por padrão, isso corresponde a 470mA. Talvez de acordo com os resultados do teste, reduzirei o valor desse resistor para 510 Ohms, o que fornecerá uma corrente de carga de cerca de 900mA (1C).
O controlador pode relatar o modo de carga atual com o pé CHG_STAT. Além disso, ele sabe dar sinais até 3 - está carregando, não está carregando e já foi carregado, mas ainda está conectado à tomada. Na primeira versão, o transistor interno pressiona o pé no chão e isso pode ser facilmente reconhecido pelo controlador. Na segunda modalidade, o transistor é completamente fechado e a perna entra em um estado de alta impedância. Usando uma energização, esse sinal também é fácil de ler pelo controlador.
Mas com o terceiro estado não é tão simples. Lá, o transistor está entreaberto e uma corrente de 20 μA flui através dele. Para considerar tal condição, fui solicitado a escolher um elevador para que cerca de metade da nutrição estivesse na minha perna. Então será possível detectar facilmente esse estado usando o ADC. Usando a lei de Ohm, obtemos R5 = 1V / 20mkA = 50k.
Como eu disse, o chip PT1502 não é apenas um carregador, mas também um controlador complicado para toda a energia. O microcircuito monitora as tensões no circuito e, usando o sinal RESET, pode controlar o processador principal (eles dizem que você ainda precisa inicializar cedo, a energia ainda não se estabilizou).

Além disso, o microcircuito pode iniciar o dispositivo com o toque de um botão (BTN1) e também, mediante um sinal do microcontrolador (PWR_HOLD), concluir a operação e desligar a energia. Bem, para sinalizar ao processador que a bateria está ficando sem sinal BAT_LOW.
E esta é a principal fonte de energia.

A tensão de saída é definida pela tensão no terminal BUCKFB e é definida como 2V com energia da bateria. Mas com energia de dois volts, um problema foi descoberto - o USB não funcionará. I.e. a bateria será carregada, mas não será capaz de transmitir dados - o microcontrolador simplesmente não pode transmitir sinais para um barramento USB de amplitude suficiente. Datashit recomenda uma tensão de pelo menos 2,7V, melhor que 3,3V.
Para não bloquear outra fonte de energia e pensar em como alternar entre elas, decidi apenas ajustar a proporção do divisor R1 / R4 + R7. Com essa inclusão, o impulso opera continuamente. Assim que o dispositivo é conectado ao USB, o transistor se abre e desvia o R7. A proporção dos resistores de acionamento muda e obtemos 3,16V na saída (ainda podemos jogar com as classificações e sustentar até 3,3V).
O PT1502 também possui 2 controles lineares.

Os componentes de baixo consumo (INA219) ou de curta duração (bluetooth) serão conectados a esses controladores; portanto, a eficiência dessas fontes não será um problema. A tensão de alimentação do LDO2 pode ser ajustada usando os sinais LDO2_SETx.
Como ainda tenho dúvidas em aberto sobre a tensão de alimentação, decidi separar os jumpers para selecionar o modo LDO2_SETx. Além disso, para poder medir o consumo real no barramento correspondente, também levo o jumper JP1 / JP2 / JP3 ao pente.
Terminando o tópico das fontes de alimentação, precisamos mencionar a potência da tela. Escrevi um pouco mais alto que, em nome da compacidade, tive que abandonar o módulo de tela adquirido e pegar a tela com as tiras na placa. Esta tela requer um conversor de impulso especial de 7-16V. Convenientemente, esta fonte pode ser ligada e desligada usando o sinal EN. O circuito em si é copiado da folha de dados do booster, exatamente o mesmo é usado nos módulos de exibição com todos.

PT1505Navegando na Internet em busca de alternativas ao chip PT1502, me deparei com sua irmã mais velha - o chip PT1505. É quase o mesmo controlador de energia, mas com uma atualização adicional. Com esse controlador, seria possível reduzir o número de elementos no quadro. Infelizmente, não encontrei chips PT1505 à venda.
A propósito, ficarei grato se você conhecer controladores de energia semelhantes de outros fabricantes.
Agora um pouco sobre o poder do microcontrolador. O microcircuito é grande e possui 6 linhas de energia - 4 para a parte digital, 1 fonte de alimentação analógica e uma para o relógio. De acordo com a folha de dados do STM32F103, em todas as linhas de energia (talvez, exceto no relógio), deve haver um capacitor de 100nF ao longo do capacitor e outro comum em 4,7uF.
Mas na folha de dados do STM32F4, diz-se que, embora os microcontroladores sejam praticamente compatíveis em termos de saídas, eles ainda possuem esquemas de energia um pouco diferentes. Portanto, nos dois terminais, deve haver capacitores de 2,2 mkF entre o terminal e o terra (e não entre o terra e a energia, como em F1). Portanto, eu tive que considerar as duas opções e um microcontrolador específico para soldar apenas parte dos capacitores.

Continuando o tópico da nutrição, você precisa descobrir como medi-la. Você pode confiar no sinal BAT_LOW e solicitar ao usuário que se enrole rapidamente se a bateria estiver fraca. Mas é exatamente isso que eu não gostei no Holux M-241 original, porque esse sinal apareceu tarde demais e foi fácil perder. Preciso de algum tipo de indicador mais informativo de energia da bateria.

Por precaução, coloquei o divisor mais comum para medir a tensão da bateria. Mas no caso de baterias de lítio, este é apenas um indicador informativo e não deve ser invocado. Para leituras mais honestas da bateria na Internet, eles sugerem o uso de um "pendente".

Este pequeno microchip conta a quantidade de energia que passou por ele de ou para a bateria. As medições são feitas no desvio R10. As leituras do microcircuito podem ser lidas através do I2C. O microcircuito é capaz de medir a tensão na bateria, a corrente que passa através do resistor e também multiplicar uma pela outra. Infelizmente, ela não sabe como acumular o valor das horas que passaram por Watt *; portanto, terá que fazer uma pesquisa constante.
Vamos para a parte digital. O coração de todo o sistema é o microcontrolador STM32F103RB.

A fita na forma de dois quartzo foi retirada de outros esquemas encontrados na Internet (verificados duas vezes na folha de dados). Eu não preciso inicializar a partir da RAM, mas porque o sinal BOOT1 puxou para o chão. O BOOT0 pode ser selecionado com um jumper para inicializar a partir da memória flash principal ou do carregador de inicialização UART integrado (por exemplo, para o firmware principal do dispositivo)
Em seguida é o LED.

Como a tensão de alimentação principal varia de 2 a 3,3V, os LEDs não devem ser conectados a ela - o brilho e o consumo de corrente variam muito. Portanto, os LEDs I serão conectados ao barramento de 2,7V, os resistores limitadores de corrente são calculados de acordo. Como o microcontrolador não será capaz de fornecer mais de 2V em seu pé quando alimentado por uma bateria, o modo push-pull do GPIO não pode ser usado. Somente dreno aberto.
Não há nada de especial a dizer sobre o botão de redefinição.

Como um dispositivo de três volts (INA219) estará no barramento I2C, você também precisará usar chaves de três volts

Um conector SWD também é padrão. É necessário um diodo para alternar a energia entre a bateria e a energia externa do programador.

Antecipando as exclamações de que eles não fazem isso e que essa conexão realmente não desconecta a bateria. Sim, ele não desliga, mas o diodo não é para isso. Isso é necessário para poder alimentar o dispositivo do programador se a bateria não estiver conectada. E se estiver conectado, deixe funcionar. Bem, se a bateria estiver conectada, você precisará proteger o próprio programador de 4,2V na bateria.
Mas os botões devem residir em mais detalhes.

O fato é que o primeiro botão não será apenas um botão, mas também funcionará como uma chave de dispositivo - o sinal BTN1 é conectado ao chip do controlador de energia PT1502. Quando o dispositivo é desligado, a energia não é fornecida ao microcontrolador e a outros consumidores. É por isso que o botão está conectado não à energia (VCC), mas à bateria (BAT). Pressionando este botão, o PT1502 liga todas as fontes de energia e inicia o microcontrolador. Depois disso, o botão pode funcionar como um botão normal. Para não queimar o microcontrolador com uma alta tensão da bateria, construí um pequeno divisor de tensão que direciona o sinal BTN1 para os quadros necessários (no entanto, é possível sem isso - o microcontrolador possui entradas tolerantes a 5V)
O segundo botão não é digno de nota. Dentro do processador, uma tração no chão será incluída e o botão alimentará uma unidade na linha ...
Passe sem problemas para a periferia pesada. USB

O conector USB fica preso no dispositivo e a eletricidade estática pode caminhar até lá. Acontece que existem microcircuitos especiais (como o STF202-22) que protegem os microcontroladores de influências externas.
Mas algo mais é interessante aqui. Um resistor de 1,5k está oculto dentro do chip STF202, que é conectado entre a perna VBUS e a linha D +. Esse resistor é necessário de acordo com a especificação USB - informa ao host que ele está preso em algo. Em muitos circuitos, esse resistor está sempre conectado entre a alimentação e a linha D +. Assim que o host vê esse resistor na linha D +, ele imediatamente começa a se comunicar com o dispositivo. Isso nem sempre é apropriado, pois Alguns dispositivos podem não estar imediatamente prontos para a comunicação.
Este é apenas o meu caso. Existe um truque simples para isso (espionado
aqui ). Você pode ativar e desativar esse resistor usando um transistor: queremos comunicação - ligamos o resistor, queremos apenas ser alimentados por USB - desligue-o. Quando você coloca seu celular em USB, ele geralmente pergunta “o que faremos? Mesclagem de dados ou apenas cobrança? ” - em termos de eletrônica, trata-se apenas de conectar um resistor de pull-up.
Mas como você sabe se um dispositivo está preso no USB? Para fazer isso, forneci o sinal USB_PLUGGED, que é removido do divisor mais simples.

5V do USB também podem ser alimentados diretamente no pé do microcontrolador - eles ainda são tolerantes a 5V. Mas deixe-o já através do divisor.
Acelerômetro agora

O esquema é retirado de uma folha de dados. O módulo é conectado via I2C, mas, para sinalizar ao microcontrolador que há novidades, também é usada uma linha de interrupção. Além disso, como o INA219 de três volts ainda está pendurado no mesmo barramento I2C, as pernas de comunicação do acelerômetro também são alimentadas pelo barramento 3B para coordenar os níveis.
Eu já mencionei que gostaria de economizar energia e desligar aparelhos não utilizados. Portanto, a energia do acelerômetro é ligada pelo transistor.
A propósito, gostei muito do chamado transistores digitais - um transistor completo com dois resistores. Isso economiza um pouco de espaço no quadro. É uma pena que, com energia de dois volts, eu não consegui pegar um transistor digital com pelo menos alguma corrente decente - 20-30 mA no máximo. Portanto, consumidores mais vorazes precisavam estar conectados aos MOSFETs.
Vá em frente GPS

O GPS está localizado em uma placa separada e é conectado através de um loopback. Como ainda não decidi o módulo GPS, forneci 2 fontes de alimentação diferentes. Além do transistor de potência no lado da placa do processador, não há nada mais interessante.
Vou apenas dizer algumas palavras sobre os UARTs. Inicialmente, planejei usar todos os 3 - um para upload de firmware e depuração, o segundo para GPS e o terceiro para Bluetooth. Mas o UART3 está nos mesmos pinos que o I2C No. 2, que eu originalmente planejava usar para a tela. Eu tive que escolher Como resultado, cheguei à conclusão de que posso fazer upload de firmware e depurar através do mesmo UART reservado para GPS (é claro, o GPS terá que ser desativado). Bem, se você precisar estrear o próprio GPS, ou seja, USB CDC (no qual você pode fazer upload de logs) e SWD. Um pouco mais tarde, abandonei a ideia de usar o I2C No. 2, para que o UART3 se libertasse, mas em nome da economia de bateria, decidi me concentrar em dois UARTs.
Bluetooth

O Bluetooth é conectado de acordo com o esquema da folha de dados. O pino PIO1 pode operar em dois modos. No primeiro, um LED está conectado a ele e o módulo pisca com esse LED. Piscadelas diferentes significam status diferente. Em outro modo, esse pino funciona como digital - quando a comunicação é estabelecida e 0, se não. Os modos são alternados pelos comandos AT durante a inicialização do módulo.
Cartão SD
Embora o esquema de conexão do cartão SD seja padrão, por algum motivo, foi muito difícil para mim. Existem muitas opções de conexão diferentes na Internet e não é tão fácil descobrir qual é a correta.

Na maioria das vezes, eu tinha perguntas em buchas. Ocasionalmente, existem esquemas onde eles colocam resistores em 1k. Alguns circuitos colocam resistores de 22 Ohm, aparentemente como proteção contra estática. No entanto, a maioria dos circuitos não oferece resistores de passagem, e provavelmente vou seguir o mesmo caminho. Eu também não vou ter estática desde A unidade flash ficará dentro do gabinete.
Parece-me que o transistor de potência também não será procurado, acho que o cartão sempre funcionará - é um registrador. Mas como essa é uma placa de teste, deixe estar. O mesmo aconteceu com a bobina - aparentemente essa inclusão no original foi feita paranóica ou o cartão foi usado em um ambiente com pouca energia ou interferência. Eu acho que solda lá um resistor zero e tenta sem uma bobina.
Exibição
Tive a oportunidade de conectar um dos módulos de exibição a todos via SPI e comparar com a conexão via I2C.
Não houve dificuldades particulares e o código só precisava ser desperdiçado um pouco. Ao mesmo tempo, a velocidade do SPI é uma ordem de magnitude superior à do I2C. Depois de adicionar os dados da folha de dados sobre consumo (4 mA para SPI versus 10 mA para I2C), a necessidade de resistores pull-up para I2C, decidi conectar o monitor via SPI.
Infelizmente, o sinal BS0 não é emitido para o loop da tela e, portanto, você não pode selecionar o modo SPI de 3 fios, apenas o SPI de 4 fios. A diferença na linha D / C adicional (dados / comando), que no caso do modo 3 fios é transmitida pelo nono bit dos dados SPI. No entanto, talvez o modo 4 fios seja melhor, porque O SPI no STM32 pode transmitir apenas 8 bits.O restante do esquema corresponde à folha de dados.E, finalmente, o squeaker. Nada de especial - basta ligar o transistor.
Caso haja um vibromotor em vez de um tweeter, forneci um diodo de proteção. No entanto, ouvi a opinião de que um diodo de proteção também não prejudica o tweeter.Em ferro
Acima, descrevi meus pensamentos sobre o assunto do corpo. Na verdade, eu até tentei criar uma placa para este caso. Infelizmente, o quadro estava muito apertado. Eu tive que usar a instalação frente e verso, mudar dos componentes 1206 para 0805, mas, mesmo assim, os componentes na placa estavam muito apertados. Além disso, todas as mudanças no esquema foram dolorosas, porque Eu tive que recriar quase metade do placar.Por isso, brinquei com ela por várias semanas, mas o conselho me derrotou e abandonei o projeto por quase um ano. Pontapé tornar aqui neste artigo . Mas, na verdade, este é apenas um protótipo e o primeiro de vários. Por que se preocupar com uma placa super compacta, onde você não pode rastejar com um ferro de solda ou um osciloscópio, se você pode depurar tudo em uma placa grande?Bem, você não precisa criar uma placa tão grande como um iPhone, mas é bem possível acessar as camadas promocionais de 100x100mm 2 do JLCPCB. Você pode praticamente se limitar. Portanto, na placa há uma enorme tela de 2,42 ”, jumpers para medir o consumo em todas as linhas de energia, capacitores de energia onde você precisa e não precisa e, em geral, um monte de peças que não podem ser instaladas. Ainda há um lugar.
Não há muito a dizer sobre a fiação. Dividi a maioria das linhas de sinal e campo ao longo da camada superior, enquanto a inferior estava quase completamente enterrada no subsolo. Infelizmente, o layout ainda era bastante denso e algumas linhas de sinal precisavam ser arrastadas ao longo da camada inferior por metade do painel. Por esse motivo, a terra é "rasgada" em alguns lugares em várias ilhas pouco conectadas. Espero que isso não seja um problema.Eu não fiz a terra sob a antena bluetooth, mas ainda assim tive que arrastar uma das linhas de sinal por essa zona. No entanto, esta é a linha BT_ON, ao longo da qual os sinais geralmente não são executados (é ligado ou desligado lá), o que significa que não deve afetar particularmente o sinal.O verão estava chegando e eu estava planejando levar o aluguel comigo de férias. Para que empregadas domésticas em hotéis não tenham medo de uma placa de depuração simples com um ventilador de fios, seria bom escondê-la no caso. Não pude negar a mim mesma o prazer e desenvolvi o caso e o conselho ao mesmo tempo. Portanto, havia placas de montagem no gabinete, montando o suporte da tela.O módulo GPS é um sanduíche de várias placas e uma antena de 12 mm de espessura. Decidi não prendê-lo em cima do tabuleiro, mas colocá-lo no mesmo nível. Isso reduziu a espessura da caixa, mas cortou um canto do quadro.Algumas fotos do quadro e o dispositivo final (nesta fase do projeto).

A bateria se encaixa bem embaixo da tela, mas tive que fazer uma pequena caixa para elevar a tela para mais perto da tampa superior.Algumas palavras no quadro de montagem. Eu soldava tudo em cerca de três noites e, cerca de uma semana à noite, levava tempo para depurar e verificar do lado do software. Para minha surpresa, não houve dificuldades fundamentais na criação do quadro e quase tudo começou como deveria.Verificou-se que a soldagem 0805 não era muito mais difícil de soldar do que 1206, é bastante comestível em casa com uma lupa. Você pode até balançar em 0603. Mas com a solda do microcontrolador e o conector da tela (eles têm um passo de 0,5 mm), tive que mexer. No YouTube, de alguma forma, parece com as pessoas - eu apenas gastei com um ferro de soldar e é isso, mas todas as minhas conclusões ficaram instantaneamente.Não sem pequenos problemas. Em alguns lugares não havia bebida, em algum lugar havia um “ranho”. A pegada do conector USB estava errada - ele tirou algumas conclusões menos do que o necessário (portanto, confie na pegada da Internet!). Eu tive que dobrar as conclusões um pouco para que elas se tornassem nos trilhos. O conector do monitor FPC comprado em Ali acabou por estar com os contatos abaixo, enquanto eu precisava dos contatos na parte superior (eu nunca suspeitava dessa diferença antes). Eu tive que "explodir" o conector da placa de vídeo padrão.Depois de colocar a placa no estojo, descobriu-se que não era possível desconectar a bateria simplesmente puxando o conector, mas eu não queria deixar a placa depurada energizada. Eu tive que apertar um botão.Ao instalar a placa, descobriu-se que não há contato com o solo em nenhum lugar em que você pudesse conectar a sonda ao osciloscópio. Eu tive que me agarrar ao conector USB com um crocodilo. Será necessário fornecer locais de teste na próxima versão do quadro.Os circuitos também revelaram problemas. Portanto, era um fato completamente inesperado que o chip PT1502 no pino RESET gerasse uma tensão de 3V (eu tinha certeza absoluta de que havia algo como um coletor aberto). Como resultado, esses 3Vs vazaram para a linha de energia, mesmo que eu planejasse ter apenas 2V lá.Aqui está um diagrama simplificado do que aconteceu.
Graças à grande mente e aos caras do easyelectronics.ru, essa junta foi decidida adicionando um diodo. Após uma pequena cirurgia, essa parte funcionou como deveria.Além disso, o módulo bluetooth (alimentado por 2,5V) conectei acidentalmente à energia principal (2V), em vez dos 3V fixos. Agora, o bluetooth pode funcionar para mim apenas quando o USB está conectado, quando a tensão da energia principal sobe para 3.3V.Em princípio, seria possível acenar com o bisturi e soldar o bluetooth na potência correta, mas o UART2 ao qual o bluetooth está conectado não é tolerante a 5V (ele mesmo o leu na folha de dados na fase de análise, ele próprio observou isso no texto acima e acabou se esquecendo ao conectar a placa ) Portanto, conectar o bluetooth à energia é maior do que a potência do microcontrolador é difícil ... Na próxima versão da placa, eu apenas conectei o bluetooth a algum outro UART.O conversor DC-DC com tensão variável também funcionou conforme o planejado - quando alimentado por uma bateria, ele fornece 2V e quando você conecta o USB sobe para 3,16V (você precisa brincar com as classificações e atingir 3,3V). Mas aqui mais uma falha do circuito surgiu: você também precisa aumentar a tensão quando alimentado pelo programador. Eu acho que isso está sendo tratado adicionando outro diodo. Vou tentar jogar um pouco mais tarde.Finalmente, durante o trabalho no quadro, ainda não entendi como alimentar adequadamente o cartão SD contra subtensão. Uma pesquisa rápida no Google não levou a nada. Aparentemente, você precisa mergulhar na leitura de especificações de páginas restritas (que, além disso, estão parcialmente fechadas). Enquanto isso, curto-circuito no R7 e a placa agora é alimentada por 3,16V (3,3V) fixos. Vou deixar assim pelos próximos meses, enquanto trabalharei na parte do software.Falando em software. Surpreendentemente (embora bastante esperado), mas em geral tudo começou sem problemas. Como alternei entre microcontroladores da mesma série (do F103CB para o F103RC), não precisei alterar a parte do software. Apenas corrigimos os números dos pinos, mas adicionamos a inclusão de transistores. No entanto, houve dois momentos não triviais com os quais tive que mexer.O primeiro é a energia da bateria. Eu depurei a placa usando a alimentação USB e tudo funcionou bem em geral. Mas o conselho persistentemente não quis ligar a bateria. I.e.
Ele pode funcionar (se você ligá-lo quando o USB estiver conectado e, em seguida, puxar o cabo), mas não funciona para iniciar com um cabo frio.De acordo com o design do chip PT1502, a placa deve começar assim. O usuário pressiona o botão BTN1 e após um terço de segundo o chip liga todas as fontes de energia. Quando tudo está bem com a energia, o PT1502 "libera" o sinal RESET, iniciando assim o microcontrolador. O processador, por sua vez, define o sinal PWR_HOLD como um, sinalizando que foi iniciado. Depois disso, o PT1502 fornece eletricidade regularmente ao circuito até o microcontrolador baixar o sinal PWR_HOLD para zero.Mas isso é em teoria. De fato, assim que o processador define o sinal PWR_HOLD, a placa é desligada instantaneamente. Trabalhei com pá em todo o circuito de energia, observei as formas de onda dos sinais principais, embaralhei o código no gerenciador de inicialização para frente e para trás, mas não consegui entender o problema. Também pequei pela ausência de um resistor pull-down na linha PWR_HOLD, que esqueci de instalar, mas é recomendado por uma folha de dados (e é provavelmente necessário). Mas adicioná-lo com um dossel não resolveu o problema. E somente quando emprestei um osciloscópio de quatro canais tudo ficou claro.
Quando o usuário pressiona o botão (linha laranja), o chip PT1502 liga a energia (linha roxa). Tudo isso acontece muito tempo (300 ms) antes dos eventos nessa forma de onda. E então algo interessante acontece. O PT1502 libera RESET (linha azul), o processador inicia e, por algum motivo, reduz a linha do botão para zero. Mesmo que o microcontrolador ainda esteja tentando aumentar a linha POWER_HOLD (linha verde) - é tarde demais, o PT1502 já desligou todas as fontes de energia. Depois, há mais algumas convulsões, mas o circuito ainda morre silenciosamente.A questão é: de onde veio o zero no botão? É tudo sobre um erro imperceptível no carregador de inicialização , devido ao qual o modo de saída foi definido no pé BTN1 (talvez milagres também tenham ocorrido nas outras pernas naquele momento) e um sinal baixo apareceu lá.O que mais teve que lutar é com o cartão SD. Simplesmente não havia módulo SDIO no antigo microcontrolador, então tive que estudar essa peça do zero. Passei quase o dia inteiro tentando obter um mapa, copiando trechos de código de exemplos na Internet e o que o CubeMX gerou. Embora o cartão fosse perfeitamente legível em um computador, ele persistentemente não queria iniciar no meu circuito. Pequei por solda deficiente, resistores de pull-up selecionados incorretamente, circuitos desajeitados e folha de dados interpretada incorretamente. Mas, para minha surpresa, outro cartão com o mesmo código e na mesma placa foi iniciado sem problemas. Será necessário estudar esse assunto com mais detalhes.Houve outro problema com o cartão. Cutucando linhas diferentes com um osciloscópio, vi atividade apenas na linha D0, enquanto no D1-D3 houve silêncio - a placa funcionava no modo de bit único. No HAL, mesmo a função HAL_SD_ConfigWideBusOperation () foi encontrada, o que pode ativar o modo de transferência de 4 bits. Infelizmente, quando o cartão foi alternado para o modo de 4 bits, os periféricos SDIO entraram no RX FIFO Overrun profundo e pararam de funcionar.O problema acabou sendo muito interessante. Acontece que dentro da função HAL_SD_ReadBlocks () há um certo loop que controla os sinalizadores SDIO. Quando novos dados chegam do cartão, esse código transfere os bytes do buffer FIFO interno para a memória do usuário. Portanto, o cartão transmitiu bytes tão rapidamente que o código em HAL_SD_ReadBlocks () simplesmente não teve tempo para transferir os dados. Eu tive que diminuir temporariamente a frequência do relógio do cartão. Bem, no futuro eu usarei DMA e esse problema não deve surgir em princípio.Conclusão e próximos passos
Aqueles que neste lugar esperavam ver o dispositivo pronto, terei que decepcionar - apenas a placa de teste está concluída e, mesmo assim, apenas o pedaço de ferro. Agora você precisa dar vida a ele, fazer a programação, ajustar os modos e o consumo. Bem, na verdade, escreva um código de log - é por isso que todo o projeto foi iniciado.No entanto, para mim, pessoalmente, esta etapa é uma conquista muito grande e importante. A eletrônica não é minha especialidade e estou muito feliz que o dispositivo tenha sido iniciado. Consegui bombear o suficiente no projeto de circuitos, combinando vários dispositivos, conectando a placa, escolhendo componentes e muito mais.Vou falar sobre o software outra vez. Bem como sobre as nuances das configurações. O fato é que todo esse preenchimento deve primeiro ser revivido e testado. No momento, conseguimos iniciar todos os dispositivos na placa (bem, exceto o tweeter), mas apenas na quantidade de "ele começou e de alguma forma responde". Nenhuma lógica de processamento ainda foi gravada.Planos para o futuro próximo:- Conduza a eletrônica em modos diferentes, verifique se o circuito ainda funciona. Corrija batentes na segunda versão do quadro
- Meça o consumo de toda a periferia e encontre maneiras de otimizar o consumo.
- Monte várias opções de placas em diferentes microcontroladores (por exemplo, L152 ou L433)
- Leia atentamente a especificação SD e descubra como conectar corretamente o cartão no modo de sinalização de baixa tensão (1,8V)
- Experimente diferentes módulos de GPS e, finalmente, decida qual deles eu vou seguir
- Encomende um chip de bússola separado (por exemplo, HMC5883L ou HSCDTD008A) e tente usá-los de alguma forma
- Faça refatoração de código interno, atualize todas as principais bibliotecas, começando com HAL
- Por fim, comece a escrever recursos. Na verdade, implemente o objetivo do dispositivo
Sobre isso, permita-me me despedir. Eu ficaria grato por comentários construtivos, idéias e conselhos sobre design de circuitos e layout de placas de circuito.Fontes:Códigocódigo bootloaderPlataHabitação