Помогите пожалуйста разобраться, что я делаю не так. Подключил серву к МК, использовал программу, от KiCom, но всеравно не пашет Вот линк на принципиальную схему в PROTEUS'e на МК АТ90S2313 http://test.sieit.ru/servo Вот сам код работы МК
При запуске симуляции поворот моторчика происходит ровно на 90 градусов в одну сторону и на этом он стопорится. Честно сказть, мне неочень хотелось этот вопрос задавать, из-за его простоты для Вас, но меня он уже доконал
Пробовал по примеру как на avr123.nm.ru задача №1 Просто в этом упражнении тоже используется таймер и его очистка, это упражнение я выполнил как в CV AVR так и в PROTEUS'e, а вот с сервой запутался
Кавитационная эрозия писал(а):Помогите пожалуйста разобраться, При запуске симуляции поворот моторчика происходит ровно на 90 градусов в одну сторону и на этом он стопорится.
Все правильно. Длинна импульса получаеться 8мс но для сервы это много, диапазон допустимой длинны импульса для сервы 0.9-2.1 мс Попробуй так:
Теперь серва должна повернуться не на 90 градусов а чуть меньше. Эта функция задержки (delay_ms()) не совсем удобна, т.к. она не может сформировать задерку равной 1.2 мс только целые значения мс, поэтому используй delay_ns() (задержка в нано секундах)
Щас только что, поставил задержку delay_ms(1) повернулась на 90 градусов в лево, а при задержке delay_ms(8) поворот на 90 градусов в право Написал delay_ns компилятр ругнулся мол неизвестное delay_ns.
Какой библиотекой подключается задержка delay_ns(), #include <delay.h>? Если этой, то почему компилятор ругается на delay_ns? И еще вопрос, как теперь сделать, чтобы серва в цикле выполняла поворот на 90 градусов в лево и поворот на 90 в право?
#include <90s2313.h> #include <delay.h> // Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { // Reinitialize Timer 0 value TCNT0=0xB2; PORTB.0=1; delay_us(1400); // меняй это число в диапаоне 900-2100 PORTB.0=0; // серву подключай к PB0 // Place your code here
}
// Declare your global variables here
void main(void) { // Declare your local variables here
// Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; // Global enable interrupts #asm("sei") while (1) {
Спасибо большое! Я наверно Вас достал уже, с глупыми вопросами При запуске симуляции положение мотора меняется: -17,9 При изменении частоты, меняется скорость достижения этого положения, на выходе PORTB.0 видно что идет смена с лог=1 на лог=0, но поворот сервы не происходит в обратную сторону.
Кавитационная эрозия писал(а):Спасибо большое! При изменении частоты, меняется скорость достижения этого положения, на выходе PORTB.0 видно что идет смена с лог=1 на лог=0, но поворот сервы не происходит в обратную сторону.
Какую частоту ты меняешь? Не частоту ли таймера? Ее менять не надо. Нужно менять число в delay_us(1400) напиши например delay_us(1800) посмотри что получиться потом напиши delay_us(1000) повернется в другую сторону.