Не работает. у меня три штырька, 1 - управляющий, 2 - "+5", 3 - "-". Когда серва отключена, то управляющий штырек имеет напряжение 0,30-0,31 В. Когда подключаю то на управляющем штырьке напряжение 0,01-0,02. Вообщем нет его. Прилагаю схему. Пояснения к ней: "0" в черном круге - питание +5 на 1А "1" в черном круге - питание +5 на 5А
"0" в ор. - управляющий штырек "1" - +5 "2Э - -
Добавлено спустя 4 минуты 11 секунд: если убрать общую землю то сервомашинка начинает двигаться, но никак не стоять на месте. Она из стороны в сторону скачет рывками.
Вы серво сигнал на звуковой вход подайте через резистор 30-100 кОм и посмотрите звуковым редактором как осциллографом. Саунфож например.
Добавлено спустя 41 секунду: Вы серво сигнал на звуковой вход подайте через резистор 30-100 кОм и посмотрите звуковым редактором как осциллографом. Саунфож например.
В сем привет.А у меня другая проблема хочу сделать таракана на двух сервах S-148.Дали мне код но она трясёться только уж чё только не менял и понять не могу в чём дело.мне надо сделать чтоб серва туда сюда ходила а она трясёться только.может кто знает в чём дело? Помогите разобраться. вот исходник. #include <mega16.h>
// My bits definitions http://avr123.nm.ru/m8_128.h #include <m8_128.h> // в этом файле я сделал определения битов для МК
#include <delay.h> // библиотека пауз CVAVR
// Alphanumeric LCD Module functions // строки нужны для работы LCD 2 строки по 16 символов // схема подключения в http://avr123.nm.ru/z5.htm #asm .equ __lcd_port=0x1B ;PORTA #endasm
#include <lcd.h> // библиотека для LCD
// ++++++ переменные добавленые в задаче 13
// индекс состояний PORTC для работы в прерывании char index_st = 0;
// массив констант содержащий 2 состояний PORTC : flash char pc_state[3]={ 0b00000001, // "1" на servo на PC0 0b00000010, // "1" на servo на PC1
0b00000000 };// "0" на всех servo
// сколько осталось мкС досчитать до 20 мС unsigned int ctr_last = 20000;
char servo_poz[2]={255,-255}; // массив для хранения положения servo
char servo_num = 0; // переменная хранит номер servo
// Timer 1 output compare A interrupt service routine interrupt [TIM1_COMPA] void timer1_compa_isr(void) { // Place your code here
TCNT1H=0x00; // обнулить счет таймера TCNT1L=0x00;
// PORTC ^= 255; // инвертировать регистр PORTC
// Вывести в PORTC новое состояние PORTC = pc_state[index_st];
if (index_st == 2){
OCR1A = ctr_last; // прерываться после отсчёта остатка времени
ctr_last = 20000; // обновить остаток времени на 20 мС
index_st = 0; // обнулить индекс } else {
// Вычислить длину имп. для сервы и вписать в OCR1A OCR1A=992+(((unsigned int)servo_poz[index_st])<<2); /* тут servo_poz[index_st] умножается на 4 сдвигом на 2 в лево и затем плюсуется к 992. пример - среднее положение сервы команда 127, умножим на 4 будет 508, прибавим 992 - получим 1500 мкС - это и есть длина импульса для среднего положения вала srvo. */
// Вычесть длину имп. сервы из периода в 20 мС ctr_last -= OCR1A ; // увеличить индекс на 1 index_st ++ ; };
} //++++++++++++++++++++++++++++++++++++++++++++++++ // Standard Input/Output functions #include <stdio.h>
// Константы ! строки в памяти программ flash char string_1[]="Prog Start"; flash char string_2[]="The END"; // Declare your global variables here // глобальные переменные для примера // вывода температуры на ЖКИ //++++++++++++++++++++++++++++++++++++++++++++++++
// Главная функция
void main(void) { // Declare your local variables here