Меня интересует, если в программе МК стоит, предположим, задержка _delay_us(100), насколько точно контроллер отработает это время?
Я написал простенький шим-генератор. Знаю, в МК есть свой встроенный, но там нельзя менять период импульсов, а только отношение длительностей 0 и 1, при подборе двигателей период может иметь значение. Не могу пока добраться до осцилографа, чтобы проверить насколько точно мой шим может изменять параметры импульсов.
вот кстати и алгоритм:
- Код: Выделить всё • Развернуть
#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 8000000UL
float d,del1,del2,d2,T;
int i;
int main(void) {
DDRD = 0xff;
DDRC = 0xff;
DDRA = 0x00;
T=2000;
del1=1;
del2=T-del1;
i=1;
d2=0.1;
while (1) {
if (i==1)
{
PORTC=0X00;
_delay_us(del1);
PORTC=0XFF;
_delay_us(del2);
del2=T-del1;
del1=del1+d2;
if (del1>T) {i=0;PORTD=0X0F;_delay_ms(100);}}
if (i==0)
{
PORTC=0X00;
_delay_us(del1);
PORTC=0XFF;
_delay_us(del2);
del2=T-del1;
del1=del1-d2;
if (del1<2) {i=1;_delay_ms(3000);PORTD=0XF0;}}
}
}