BLDC и PIC16F1947

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
izludec
Родился
Сообщения: 5
Зарегистрирован: Вс июл 13, 2014 17:55:05

BLDC и PIC16F1947

Сообщение izludec »

Создаю систему управления вентильным двигателем на основе PIC. Помогите разобраться, двигатель разгоняется до некой скорости, потом начинает крутиться в другую сторону. Понимаю, что нужно что-то еще, но что, понять не могу. САУ определенно не мой конек.


Спойлер

Код: Выделить всё

/*
Processor: PIC16F1947
Compiler:  CCS for PIC
 */

#include <16F1947.h>
#use delay(crystal=20MHz)
#USE TIMER(TIMER=1,TICK=100us,BITS=16,NOISR)
#USE PWM(OUTPUT=PIN_G0, FREQUENCY=1khz, DUTY=50)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)


char buf[100];
int8 count;
int32 time, k;
int16 st[5];
long duty_val; 
int8 a;

#int_ccp1 
void ccp1(){
  output_d(st[a]);
  a = a + 1;
  if (a == 6) a = 0;
   }
   
/*#INT_RB 
void interp(){
   set_ticks(0);
   while(input_state(PIN_B0));
   time = get_ticks(); 
   }*/

  
 
void razgon(){
int8 hall;
hall = input_e();  
if (hall == 0b00000101){
a = 0;
}
else {
if(hall == 0b00000001){
a = 1;
}
else {
if(hall == 0b00000011){
a = 2;
}
else {
if(hall == 0b00000010){
a = 3;
}
else {
if(hall == 0b00000110){
a = 4;
}
else {
if(hall == 0b00000100){
a = 5;
}}}}}}  }  


void shim(long dutyv){
    pwm_on();
    pwm_set_duty_percent(dutyv);   
   }

   
 /*    
PIN_D0 - U-
PIN_D1 - U+
PIN_D2 - V-
PIN_D3 - V+
PIN_D4 - W-
PIN_D5 - W+
-----------
-----------   
*/   


/*void start(){
   while(!(input_state(PIN_E1))){
   output_bit(PIN_D5, 1);
   shim(k);
   if(k<900) k=k+1;
     }
   }*/
   

int main (void)
 { 
  
  st[5] =  0b00001001; 
  st[0] =  0b00100001; 
  st[1] =  0b00100100;
  st[2] =  0b00000110;
  st[3] =  0b00010010;
  st[4] =  0b00011000;
  time = 0;  
  int k = 0;
  k = 10;
  set_tris_e(255); 
  set_tris_d(0);
  output_d(0);
  a = 0;  
  //int32 i = 10000; 
 
setup_ccp1(CCP_CAPTURE_RE);  
enable_interrupts (INT_CCP1);
enable_interrupts (GLOBAL);
razgon();
shim(k);      

 while (1){    
/*  pwm_off();
start(); 
delay_ms(10000);
  */
   }  
   return 0;
 }   

 
Реклама
otest
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Re: BLDC и PIC16F1947

Сообщение otest »

Нужна обратная связь.
Реклама
izludec
Родился
Сообщения: 5
Зарегистрирован: Вс июл 13, 2014 17:55:05

Re: BLDC и PIC16F1947

Сообщение izludec »

otest писал(а):Нужна обратная связь.

Это то я понимаю. Только не знаю какая она должна быть и как это реализовать программно. Не могли бы вы помочь? Особенно с программной реализацией.
otest
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Re: BLDC и PIC16F1947

Сообщение otest »

ОС с тахогенератора.
Реклама
Эиком - электронные компоненты и радиодетали
izludec
Родился
Сообщения: 5
Зарегистрирован: Вс июл 13, 2014 17:55:05

Re: BLDC и PIC16F1947

Сообщение izludec »

otest писал(а):ОС с тахогенератора.
Да, сама обратная связь у меня вроде есть, не с тахогенератора, но с датчиков Холла.

Код: Выделить всё

/*#INT_RB 
void interp(){
   set_ticks(0);
   while(input_state(PIN_B0));
   time = get_ticks(); 
   }*/
Допустим, я получил реальную частоту и у меня есть значение необходимой, что делать дальше?
Реклама
otest
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Re: BLDC и PIC16F1947

Сообщение otest »

Дальше сравнивать частоты и принимать нужное решение.
Реклама
Аватара пользователя
Adusik
Поставщик валерьянки для Кота
Сообщения: 2198
Зарегистрирован: Ср мар 14, 2007 01:50:10

Re: BLDC и PIC16F1947

Сообщение Adusik »

otest: сообщи в личку своё мыло, на форуме в личке файлы не приссоединяются.
Ответить

Вернуться в «PIC»