Б.г.>> У машинки есть зона нечувствительности
Xan> А если делать импульсы шима чётные - шире, нечётные - уже, чтоб они всё время за пределами нечувствительности оказывались?
Смотри:
1. Я множу угол на коэффициент, множу угловую скорость на коэффициент, складываю.
2. Если знак получившегося числа "плюс", я добавляю к числу полуширину зоны нечувствительности.
3. Если знак "минус", я вычитаю эту же константу.
4. Если случайно получился ноль, я с ним ничего не делаю.
Таким образом, в зону нечувствительности можно попасть, только если после суммирования ноль.
Там другая проблема - из-за того, что я множу сдвигом, коэффициенты при пропорциональном члене степени двойки, а у скоростного члена n/256, причём, при k=16 оптимальные n - это 2 и 3.
Так вот, при умножении пропорционального члена пока нет проверки на переполнение, из-за чего при K=16 резкий рывок может перевести устройство в застревание в положении -64 или +64 градуса. Там просто нужно дописать проверку после каждого сдвига на переполнение и знак, и, если переполнение случилось, писать либо максимальное, либо минимальное значение в регистр ШИМ.