Просмотр полной версии : PIC16F887 + Linux
M.W.N.N.
01.05.2010, 22:01
Здравствуйте. Подскажите пож-та срезу для разработки ПО под PIC микроконтроллер PIC16F887 и программатор.
ОС Linux (Ubuntu 9.10)
Под Windows в комплекте идет компилятор microC + ПО для программатора - PICkit 2 v2.4
Комплект RoboPica
M.W.N.N.
02.05.2010, 01:58
Сразу еще 1 вопрос:
Вот моя библиотека для управления двигателем mator.h
char motor_duty_=127;
char motor_init_=0;
void Motor_Init()
{
if(motor_init_==0){
motor_init_=1;
ANSELH.F0=0;
ANSELH.F2=0;
TRISB.F1=0;
TRISB.F2=0;
TRISD.F0=0;
TRISD.F1=0;
Pwm1_Init(5000);
Pwm2_Init(5000);
}
}
void Change_Duty(char speed)
{
if(speed!=motor_duty_)
{
motor_duty_=speed;
Pwm1_Change_Duty(speed);
Pwm2_Change_Duty(speed);
}
}
void Motor_A_FWD(){
Pwm1_Start();
PORTD.F0=0;
PORTD.F1=1;
}
void Motor_B_FWD(){
Pwm2_Start();
PORTB.F1=0;
PORTB.F2=1;
}
void Motor_A_BWD(){
Pwm1_Start();
PORTD.F0=1;
PORTD.F1=0;
}
void Motor_B_BWD(){
Pwm2_Start();
PORTB.F1=1;
PORTB.F2=0;
}
void M_A_F(){
Pwm1_Stop();
PORTD.F0=0;
PORTD.F1=0;
}
void M_B_F(){
Pwm2_Stop();
PORTB.F1=0;
PORTB.F2=0;
}
void Forward(char speed){
Motor_Init();
Change_Duty(speed);
Motor_A_FWD();
Motor_B_FWD();
}
void Backward(char speed){
Motor_Init();
Change_Duty(speed);
Motor_A_BWD();
Motor_B_BWD();
}
void S_Right(char speed){
Motor_Init();
Change_Duty(speed);
Motor_A_FWD();
Motor_B_BWD();
}
void S_Left(char speed){
Motor_Init();
Change_Duty(speed);
Motor_A_BWD();
Motor_B_FWD();
}
void Motor_Stop(){
Motor_Init();
Change_Duty(0);
M_A_F();
M_B_F();
}
Код программы которую гружу в микроконтроллер:
#include "motor.h"
void main(){
while(1){
Forward(255);
Delay_ms(2000);
S_Left(255);
Delay_ms(800);
Forward(255);
Delay_ms(2000);
S_Right(255);
Delay_ms(800);
Forward(255);
Delay_ms(2000);
Backward(255);
Delay_ms(1000);
Motor_Stop;
}
}
По идее робот должен так:
2000 мс ехать вперед
800 мс поворачивать налево
2000 мс ехать вперед
800 мс поворачивать на право
2000 мс ехать вперед
1000 мс ехать на зад.
Но он постоянно едет в перед.
POS_troi
02.05.2010, 09:19
Я не очень в Сях и темболее под Пик но попробуй всеже так
#include "motor.h"
void main(){
while(1){
Forward(255);
Delay_ms(2000);
Motor_Stop(); // Тоесть перед сменой направления стопить все движки
S_Left(255);
Delay_ms(800);
Motor_Stop();
Forward(255);
Delay_ms(2000);
Motor_Stop();
S_Right(255);
Delay_ms(800);
Motor_Stop();
Forward(255);
Delay_ms(2000);
Motor_Stop();
Backward(255);
Delay_ms(1000);
Motor_Stop;
}
}
Также, что за функции
Pwm1_Start();
Pwm2_Start(); ?
Стандарт или самописные? Многие делают ошибки при инициализации Шим.
А среду бери из "Центр приложений" или как он там называется (тот что в главном меню в самом конце) , ищи поиском по сочетанию "PIC". Там их штук 5 будет наверное.
M.W.N.N.
02.05.2010, 14:18
POS_troi спасибо за совет, я пробовал после каждого действия останавливать двигатели, но он как будто не замечает этого. Странно что если сделать только 2 действия он выполняет нормально на пример: поехать в перед и повернуть на право.
Pwm1_Start();
Pwm2_Start();
Это стандартные функции, старт двигаетелей помойму. С шим 100 процентов ничего не напутанно, функцию Шим"а брал с книги которая идет к роботу:
void Change_Duty(char speed)
{
if(speed!=motor_duty_)
{
motor_duty_=speed;
Pwm1_Change_Duty(speed);
Pwm2_Change_Duty(speed);
}
Буклет надо сказать они выпустили кислый :(
POS_troi
02.05.2010, 17:15
Тут дело в том что Шим тебе по умолчанию дает только положительный импульс и соответственно двигатель у тебя будет крутить только вперед , ну хотя если у тебя те функции стандартные то может както и можно указать шиму что ему отдать (положительный период или отрицательный).
Вообще для данного дела лучше использовать драйверы, никаких проблем.
Есть три ножки и рули как хочеш
на первую подал - вперед поехал
на вторую падал - назад поехал
на третью ШИМ завел и с разно скоростью поехал
Красота, ели пали =)
M.W.N.N.
02.05.2010, 18:03
Вот мое чудо :)
http://imglink.ru/pictures/02-05-10/fffd6d6d91247248e425f6326fe20bd8.jpg
M.W.N.N.
02.05.2010, 19:49
Тут дело в том что Шим тебе по умолчанию дает только положительный импульс и соответственно двигатель у тебя будет крутить только вперед , ну хотя если у тебя те функции стандартные то может както и можно указать шиму что ему отдать (положительный период или отрицательный).
От шима зависит скорость движения, а для движения вперед и назад просто идет обращение к разным портам.
Значения ШИМ от 0 до 255
Кто знает почему программа движения работает не корректно?
POS_troi
02.05.2010, 20:40
Кусочек схемы, драйвера двигателя можеш выложить?
З.Ы. Пореж фоту, ато Ачат уехал =/
M.W.N.N.
02.05.2010, 20:54
Вот схема http://imglink.ru/show-image.php?id=386e79fde73bbb846c3cafa66f99303b
M.W.N.N.
03.05.2010, 14:28
Нашел программатор и компилятор в 1 - Piklab, но он по ходу KDE зависим - просит подгрузить уйму библиотек KDE'ных. При компилировании вылетает, так что мои поиски продолжаются :)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot