Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fast adc #1

Draft
wants to merge 7 commits into
base: master
Choose a base branch
from
Draft

Fast adc #1

wants to merge 7 commits into from

Conversation

joaoantoniocardoso
Copy link
Member

@joaoantoniocardoso joaoantoniocardoso commented Aug 12, 2019

Aqui está a versão com o adc rápido, usando um oversampling de pelo menos 6 bits para nosso adc. Não sei dizer até onde isso realmente adiciona precisão, preciso ainda fazer um teste com uma tensão de referência bem estável, e também comparar os valores com um voltímetro de alta precisão.

Algumas mudanças necessárias para aumentar a frequência foram:

  1. aumentar também a frequência do módulo machine;
  2. transferir a computação da média do adc (que antes ocorria no próprio isr do adc) para o módulo machine;
  3. reduzir o baud-rate da usart para que ele consiga cumprir a temporização mesmo com as milhares de interrupções do adc.

Para tentar melhorar o nível sinal-ruído do adc, apliquei também a técnica de 'noise reduction' utilizando o sleep no modo adc. Não consegui perceber diferenças, mais testes precisam ser feitos. Até mesmo não tenho certeza se ele está em sleep na maior parte dos adcs por conta da interrupção do timer do machine. Talvez uma opção em relação à isso seria remover este timer e fazer com que o machine rode de acordo com um divisor de clock do próprio timer do adc, mas pode resultar em uma janela com pouco tempo disponível para o processamento.

Nota que por estar testando num arduino, desabilitei o canbus.

É importante notar que agora tem 500 mil interrupções por segundo ocorrendo, então talvez na hora de enviar os dados pelo canbus tenhamos que realizar atomicamente desabilitando as interrupções naquela parte.

This adc module was reduced to just 1 adc in order to make things
cleaner and easier.
The idea here is that there is now a static struct that is only
acessible to adc itself and when it done accumulating values of the
period, it copies this values to the external acessible struct adc0.
@joaoantoniocardoso joaoantoniocardoso marked this pull request as draft October 15, 2022 01:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant