Meu post importado de outro forum.
Um salve a todos do forum.
Estou fazendo testes com 3 micro processadores, o Arduino nano, STM 32 e o ESP 32.
Tive problemas com leitura de controle de fluidos e achei os resultados um pouco estranhos, por isso resolvi fazer testes utilizando um osciloscópio.
A principio resolvi fazer um simples teste com a função delayMicroseconds com pinout high de 1.2 ms em cada um dos três.
Os Arduino (UNO e NANO), ESP32 Wroom estavam precisos com a leitura do osciloscópio mas o STM32 precisou de um fator de correção para diminuir o tempo que estava acima de 1.2 ms.
Estaria eu utilizando um pino errado (PB5) para executar esta função?
Segue abaixo o exemplo do código utilizado no arduino ide
// ################# Definicao de constantes
#define FUEL PB5 // output DO PULSO
// ################# Declaracao de variaveis
float PULSO = 1.2 ; // TEMPO DE DURAÇÃO DO PULSO EM MS a ser convertido em microsegundos
float FATOR = 0.85; // fator de correção de 0,85 para ajustar o tempo lido no osciloscópio
float PULSOM = PULSO * 1000 * FATOR ; // TEMPO ESTADO HIGH
do
{
digitalWrite(FUEL, HIGH);
delayMicroseconds(PULSOM);
digitalWrite(FUEL, LOW);
delay(500); // TEMPO DE ESTADO LOW
}
while (1 == 1);
###############################################################################
Tags:
Adicionando informação
Refiz o teste verificando as configurações e utilizando outro STM32F103C8 e os resultados foram idênticos.
Foi necessário utilizar um fator de correção para o STM32 manter um pulso com o tempo correto.
Mais alguém teve esta experiência ou estou utilizando pino errado?
Colaboração importada de Sérgio Lembo
Erro bravo esse se considerarmos que a ST diz no manual que o RC interno é calibrado de fábrica para 1%. Aqui estou assumindo que está sendo utilizado o oscilador interno. Caso seja externo a colocação do osciloscópio nos pinos OSC_IN ou OSC_OUT já te permitirá conferir a frequência base.
De qualquer forma aqui vai um link de calibração do RC interno quando se deseja precisão de tempo <1%, talvez te dê uma luz.
https://www.st.com/content/ccc/resource ... 289137.pdf
No seu código não aparece as informações iniciais onde é informado o valor do clock e sua origem.
Acredito ter havido um erro nas informações iniciais do seu compilador na parte de frequência e origem, 15% de erro é coisa demais.
Boa sorte
Carlos , você esta usando clock interno?
Qual frequência, qual configuração?
Se quer precisão use um cristal de boa qualidade. Eu nunca usaria o RC interno.
OBS - já fiz medições de clock de Arduino e as variações são expressivas.
Os cristais usados nos Arduinos (chineses) são de baixa qualidade.
Clock interno é usado em circuitos onde o controle de tempo não é importante.
Que parece não ser o seu caso.
Na verdade eu preciso de um clock interno preciso para dosar quantidade de combustível para um bico injetor que pode variar entre 1.2 e 2.5 ms e vou utilizar a leitura de um pulso externo para iniciar o período de injeção.
Vou deixar dois sketchs que utilizei para fazer testes de dosagem de combustível sendo um para o arduino nano que funcionou perfeitamente e outro para o STM32 que teve imprecisão de tempo de delay.
[ ]´s
A minha opinião é a seguinte:
No mesmo "modulo" estes erros apresentados são constantes ou variam.
Se forem constantes acredito que não seja problemas, pois conhecendo eles podemos
corrigi-los com um fator de correção.
Mas se forem inconstantes, dai fica inviável usar o "modulo".
RV
Carlos, ficou devendo a respostas.
A sua placa STM32 esta usando clock interno? Ou esta usando um cristal no clock ?
Qual frequência, qual configuração?
Afinal, qual placa STM32 esta usando ?
Prezado Sergio
Obrigado pela ajuda
Eu fiquei tão perplexo com a falha que cheguei a utilizar dois osciloscópios para ver a leitura e só não testei outro STM32 por não possuir algum vindo de outro lote de fabricação.
Sobre o seu questionamento sobre não haver valor do clock de origem, realmente não há porque não estou usando nenhum settings de clock no código.
Estou utilizando o arduino IDE nos três processadores e baseado nas suas informações e meus testes posso chegar a algumas hipóteses.
1 - Necessidade de settings de clock no código para uso com STM32 no Arduino IDE.
2 - Bug no compilador do arduino IDE para STM32
3 - Lote de processadores com falha.
Bom dia CB,
Tenho aqui o UNO/MEGA/Mini/Due/ESP8266/ESP32/SMT32.
Gostaria de repetir o teste que você fez com eles e comparar os resultados.
Para que seja fiel ao resultado, gostaria que anexasse um arquivo com o sketch completo
que usou para este fim.
Por favor não cole na área de texto.
Anexe como um arquivo.
RV
primeiros teste usando o sketch anexo.
Acredito que o responsável pelo resultado não seja o ucontrolador e sim o cristal utilizado.
Resultados: Melhor resultado até agora ESP8266.
RV
useg | ||
Base de tempo----> > | 1200 | |
u | Tempo lido | % erro |
mini | 1209,416667 | 0,78% |
Uno | 1209,583333 | 0,80% |
Mega | 1202 | 0,17% |
Due | 1339,66666 | 11,64% |
Opa.
Segue anexados os scketchs para arduino e STM32.
Enviei os sketchs pra você.
Você chegou a testar um STM32 sem usar o fator de correção?
Se sua hipótese do cristal estiver correta, realmente pode ocorrer algum problema no cristal dos meus dois STM32, ou seja, o lote que comprei.
[ ]´s
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por