• slider image 442
  • slider image 477
  • slider image 479
  • slider image 480
  • slider image 481
  • slider image 482
:::

論壇索引


Board index » All Posts (a780917a)




BLDC六步驅動的問題
#1
高級會員
高級會員


大家好,這次想問的是用於BLDC六步驅動的腳位控制
使用的是PIC16F1933,搭配MCC做腳位設定,用ECCP(1~3)將
RC0,RC2,RC7設為PWM輸出控制上臂,
RA6,RC1,RC6設一般IO輸出控制下臂,

問題1:PWM關斷方式
下面的程式,當上臂需關斷時用 EPWM1_LoadDutyValue(0);
將DutyCycle寫0,這樣有問題嗎?還是可以用IO_RC2_LAT=0;
或PORTC = (PORTC & 0xFB);之類的程式去關

/*
 反轉順序:132645
 RC0(EPWM2):W+ RC2(EPWM1):V+ RC7(EPWM3):U+
 RA6:W- RC1:V- RC6:U-
 */
void PWM_Switch(void)
{
    switch(
Hall_P)
    {
        case 
0:
                
LED_RC4_LAT 0;
                break;
    
        case 
1://U+W-   
            
if(Hall_N == ||  Flag.Initial==0)
            {
                
EPWM3_LoadDutyValue(DutyCycle); //U+
                
IO_RA6_LAT 1//W-
                
EPWM1_LoadDutyValue(0);  //V+ = 0
                
Hall_N 1;
                
Hall_Er_T 0;   
            }
                break;
                
        case 
2://W+V-   U+ = 0   
            
if(Hall_N == ||  Flag.Initial==0)
            {               
                
EPWM2_LoadDutyValue(DutyCycle); //W+
                
IO_RC1_LAT 1//V-
                
EPWM3_LoadDutyValue(0); //U+ = 0
                
Hall_N 2;
                
Hall_Er_T 0;   
            }                
                break;      
                
        case 
3://U+V-   W- = 0
            
if(Hall_N == ||  Flag.Initial==0)
            {            
                
EPWM3_LoadDutyValue(DutyCycle); //U+
                
IO_RC1_LAT 1//V-
                
IO_RA6_LAT 0//W- = 0
                
Hall_N 3;
                
Hall_Er_T 0;                
            }
                break;     
                
        case 
4://V+U-  W+ = 0
            
if(Hall_N == ||  Flag.Initial==0)
            {
                
EPWM1_LoadDutyValue(DutyCycle); //V+
                
IO_RC6_LAT 1//U-
                
EPWM2_LoadDutyValue(0);  //W+ = 0
                
Hall_N 4;
                
Hall_Er_T 0;
            }
                break;  
                
        case 
5://V+W-   U- = 0
            
if(Hall_N == ||  Flag.Initial==0)
            {            
                
EPWM1_LoadDutyValue(DutyCycle); //V+
                
IO_RA6_LAT 1;  //W-
                
IO_RC6_LAT 0;  //U- = 0
                
Hall_N 5;
                
Hall_Er_T 0;
            }
                break;
         
        case 
6://W+U-   V- = 0
            
if(Hall_N == ||  Flag.Initial==0)
            {                
                
EPWM2_LoadDutyValue(DutyCycle); //W+
                
IO_RC6_LAT 1//U-
                
IO_RC1_LAT 0//V- = 0
                
Hall_N 6;
                
Hall_Er_T 0;         
            }
                break;  
           
        case 
7:
                
LED_RC4_LAT 0;
                break;            
    }
}


問題2:Hall訊號與換相
Hall腳位要不要用IOC中斷去觸發?或者放在主程式裡隨時偵測就好?
電子換相怎麼這麼危險..Hall隨便一個雜訊導致相位切錯就是直接爆炸
做了很多種嘗試,還是無法完全避免雜訊問題,有沒有建議呢?
Hall_P = (PORTB 0x07);
            
PWM_Switch();

問題3:ALARM後的處理
目前是用過電流與換相計時的方式觸發ALARM
ALARM觸發後該六臂全部切斷嗎?
會不會有馬達反電勢無處釋放造成IGBT燒壞的情況呢?
目前只要運作中出問題,驅動板就會有元件燒毀..只能猜原因。

發表於: 2023/11/22 14:39
頂部


Re: PIC16F ,USART接收問題
#2
高級會員
高級會員


自問自答
是輸出端的問題, 直接丟A5,00,00,00,64,7D 沒有間斷的話會有異常

設一個計時器(10ms)
每次丟一個Byte就可以了
A5
00
00
00
64
7D

發表於: 2023/10/11 14:33
頂部


PIC16F ,USART接收問題
#3
高級會員
高級會員


版主好大家好,

這次要問PIC16F系列Usart的接收問題
用的是PIC16F1829,MPLABX IDE,波特率:19200

我需要接收一組訊號 :A5,00,00,00,00,64,7D
A5=字頭, Tab[0~3]=開關使用0 or 1,Tab[4]=0x00~0x64, 7D=字尾
Tab[4]數據會一直亂跳。
但如果只傳送一組變數:A5,64,7D
Tab[0]接收的數據就很正常,傳輸端修改變數,接收端會一起變化。
程式如下,可以幫我看看問題在哪嗎
uint8_t Tab[5];
void User_Usart_R(void)
{
while (EUSART_DataReady)
{
uint8_t Data = 0;
Data = EUSART_Read();
if(Uart_FLAG == 0)
{
if(Data == 0xA5)
{
Uart_FLAG = 1;
k = 0;
}
}
else
{
if(Data == 0x7D)Uart_FLAG = 0;
else
{
Tab[k] = Data;
k++;
}
}
}

發表於: 2023/10/11 10:16
頂部


Re: PIC16系列如何使用printf指令做Usart傳輸呢
#4
高級會員
高級會員


改成這樣成功了
printf("main.t0.txt=\"-100.0\"\xff\xff\xff");

發表於: 2023/9/22 16:07
頂部


PIC16系列如何使用printf指令做Usart傳輸呢
#5
高級會員
高級會員


版主好大家好,

這次要問PIC16F系列如何使用printf指令傳輸UART串列數據呢
用的是PIC16F1823,MPLABX IDE,
我在網上搜到的方法是在esuart.c裡加入
include
void putch(unsigned char byte);
void putch(unsigned char byte)
{
while(!TXIF)continue;
TXREG = byte;
}
接著我在main.c裡
while (1)
{
printf("main.t0.txt=100\0xff\0xff\0xff");
}
想試著用HMI的通訊協議傳輸100出去,但聯機一直沒有效果
是哪邊有問題呢,波特率兩邊都設19200,RX->TX TX->RX
另外想問EUSART的中斷要不要開,跟Redirect STDIO to USART要不要勾呢

發表於: 2023/9/22 15:14
頂部


副檔案與無法燒錄的問題
#6
高級會員
高級會員


各位好,小弟用的是MPLAB X IDE,PIC16F1933 想請問

Source Files除了main.c 要在加入副程式是新增main.c 還是avr-main.c 呢?
Header Files 建立新的是選擇xc8_herder.h嗎?

小弟想試一下用I2C 控制OLED ,附件的檔案編譯成功,但是卻不行燒錄,不曉得問題出在哪裡
BUILD SUCCESSFUL (total time: 2s)
Loading code from C:/Users/keror/MPLABXProjects/OLED_Test1933.X/dist/default/production/OLED_Test1933.X.production.hex...
Program loaded with pack,PIC12-16F1xxx_DFP,1.2.63,Microchip
Loading completed
Cannot program a production build to a debug header.

Attach file:


Link only for registered users

發表於: 2022/7/19 15:28
頂部


轉出燒錄檔問題
#7
高級會員
高級會員


我想問用MAPLAB X IDE 編輯好程式後,配置(config)要怎麼內建在hex檔裡呢?

我自己試燒好像都沒問題
但寄給供應商後,代燒錄來的config有時會是初始配置,必須再給個config文件給他修改。

我提供的檔案是dist\default\production裡的HEX檔

發表於: 2022/6/13 16:32
頂部


Re: 接收串列傳輸數據
#8
高級會員
高級會員


謝謝大佬,確實是中斷互相蓋過導致。
我將一些不用即時處理的程式移到主迴路就可以了。
謝謝各位大佬的指導

發表於: 2022/4/15 16:51
頂部


Re: 接收串列傳輸數據
#9
高級會員
高級會員


謝謝大佬,儲存數據這部分OK了。

我發現我抓取的Data會亂跳,但是波形在視波器顯示都滿穩的
SLK與SDA 我用RA2做SLK引腳,IOC上緣觸發中斷,而RA4上緣觸發則是在RA2為於高位時數值重新指向低位。用ICD3 Debug監測每一RUN的數值都不一樣= =

void User_RA2_ISR(void)
{
if(IO_RA4_PORT)
{
cn = 1;
}
else cn = 0;
Alldata = Alldata | ( (cn & 0x01) << j );
if(j < 23)j++;
}
void User_RA4_ISR(void)
{
if(IO_RA2_PORT && j == 23 )
{
j = 0;
Value.AllMsg = (0x0fff & Alldata);
FlagReg1.Minus_FLAG = ((Alldata >> 20) & 0x01);
Alldata = 0;
}
}

發表於: 2022/4/13 14:40
頂部


Re: 接收串列傳輸數據
#10
高級會員
高級會員


對,我想問Bit排列寫入的方法,是類似下面這樣,把數值依序放入a0~a7這樣
ByteValue1就可以直接提取16進制的數值嗎?
struct ByteValue1
{
unsigned a0 : 1 ;
unsigned a1 : 1 ;
unsigned a2 : 1 ;
unsigned a3 : 1 ;
unsigned a4 : 1 ;
unsigned a5 : 1 ;
unsigned a6 : 1 ;
unsigned a7 : 1 ;
};
另一個問題是我想用每次CLK觸發時,用迴圈填入數據,但是bit形式的陣列是怎麼宣告呢?
if(j<23)
{a[ j ] = Data;}
else
j = 0;
沒找到這類範例的關鍵字,厚顏來請各位老哥提點:D

發表於: 2022/4/12 16:11
頂部



(1) 2 3 4 ... 8 »



:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------