• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
  • slider image 488
  • slider image 491
:::

論壇索引


Board index » All Posts (tdzuc)




DISPIC30f4011 的ADC設定?
#21
初級會員
初級會員


dispic30f4011 ADC可以使用PWM的信號驅動取樣
但是我想問說 如果我有三個ADC訊號 分別是需要依據
三個PWM1H PWM2H PWM3H來驅動
那這顆IC有這樣的能力嗎?
怎嚜設定呢?

發表於: 2009/5/24 20:41
頂部


Re: 請問有關於撰寫PI控制器的範例嗎?
#22
初級會員
初級會員


an696 有pid得code
裡面還寫了s型軌跡規劃
很有用喔
我自己有用dsp4011寫pid位置控置 寫的很簡單
不確定是不是你要的
如果有須要可以寄給你

發表於: 2009/5/23 19:13
頂部


Re: 有關馬達電流偵測
#23
初級會員
初級會員


真是感謝兩位大大的解說
覺的學了好多,難怪我看大家都是直接接近pic頂多加個隨藕還是放大,這兩天來測試看看測完在跟大家分享結果
^^

發表於: 2009/5/23 19:10
頂部


Re: 有關馬達電流偵測
#24
初級會員
初級會員


不了解為什摸 duty正中間就是平均電流
所以要取在duty正中間是要起動pwm中斷
而且中斷的點必需隨pwm的變話而變化囉

還有為何加了低通就不能控呢?
感覺加了低通再從ADC讀入數值 然後再寫各PID
應該可以控電流 跟TORQUE
小弟不才 許多東西不了解哈
希望大家給意見阿謝謝阿

發表於: 2009/5/23 4:44
頂部


Re: 關於 dsPIC30F4011 QEI 問題
#25
初級會員
初級會員


我覺的只有一個的話
只要使用timer 的外部訊號來源
它就會自動的計數
an696(application note) 有相關的資料

發表於: 2009/5/23 4:38
頂部


Re: 有關馬達電流偵測
#26
初級會員
初級會員


要在turn on 的時候取值是否是要在PWM開啟中斷
那ADC轉換來的及嗎?

如果我shunt resistor接在前端而不是H bridge的後端,是否就會是平均電流呢?

現在我接了low pass filter是OK了,可是這樣又要多電路體積,因為電容要夠大,電阻也要夠大才能讓cut frequency 為1HZ的低通濾波,大的電容就很大顆,就不能節省空間。

接下來會試看看其他方法。
謝謝提供意見

發表於: 2009/5/22 16:21
頂部


有關馬達電流偵測
#27
初級會員
初級會員


最近在研究電流回授,我在H BRIDGE 下端接一個電阻 然後將電流轉成電壓,不過我看了一下他的波形是PWM的形狀ㄟ,雖然它會隨著有沒有阻力變大變小 蛋波形還是PWM形狀 那我接近控制器的時候 不是有時候會讀到0嗎 ?就不是平均的電流
我應該加什麼電路在接近PWM呢 ? 低通濾波嗎?
有人有圖示可以跟我講解嗎 謝謝

發表於: 2009/5/22 3:05
頂部


C code 如何將24bits truncated 成16bits
#28
初級會員
初級會員


下面是一段程式我一直不懂的是它要把24bit 變成16bits
而大於16bit的它就把它刪掉 所以第一段code它應該要判段它的最高位元的如果為負號而且它比0x8000更負的話就都設定成
0x8000但是這段敘述 if((poserror.i[1] != 0xffff) || !(poserror.b[1] & 0x80)) 怎看都不太對勁,如果我是0xffff7fff 那poserror.b[1]=7f, 那!(poserror.b[1] & 0x80)為
ture所以進去然後被設成0xffff8000;就跟想的不太一樣
有人可以解惑嗎? 這是an718的一段程式應該沒錯 總覺得我不知那裡想錯了。附件有所有程式碼

//第一段code
if (poserror.b[2] & 0x80)// If position error is negative.
{
poserror.b[3] = 0xff; // Sign-extend to 32 bits.

if((poserror.i[1] != 0xffff) || !(poserror.b[1] & 0x80))
{
poserror.i[1] = 0xffff;// Limit error to 16-bit signed
//integer.
poserror.i[0] = 0x8000;
}
else;
}


//第二段code
else
// If position error is positive.
{ poserror.b[3] = 0x00;
if((poserror.i[1] != 0x0000) || (poserror.b[1] & 0x80))
{ poserror.i[1] = 0x0000; // Limit error to 16-bit
// signed integer.
poserror.i[0] = 0x7fff;
}
else;

Attach file:


Link only for registered users

發表於: 2009/4/13 22:25
頂部


pic18f4520 APP01 V3.0 外部震蕩器 問題
#29
初級會員
初級會員


下述是一段程式使用timer1的外部震盪器(32767HZ)可是實際跑的時候,TMR1L根本就沒有計數,一直停留在0,想請問是因為什麼問題呢?APP01 V3.0該插的我也有插,就不懂是哪裡出錯了,有什麼設定需要修正嗎? 還是我差錯APP01 V3.0的腳位。 我有放附加的檔案,附加檔案中斷向量0x18要改成0x08。

//**********************************************************
//* Ex9_1_TMR1_INT.c
//* 設計一個0.5秒讓 PORTD 的 LED 所顯示的二進位數字自動加一的程式
//**********************************************************
#include <p18f4520.h> //納入微控制器定義檔
#include <timers.h>
//納入計時器函式庫定義檔

// 結構位元定義
#pragma config OSC=HS, BOREN=OFF, BORV = 2, PWRT=ON, WDT=OFF, LVP=OFF

#define TMR1_VAL 65536-16384
// Timer1 設定為 500ms 中斷一次

//宣告函式原型
void Init_TMR1(void);
void timer1_isr (void);

//宣告並安排中斷執行程式記憶體位置
#pragma code high_vector=0x08
void interrupt (void)
{
_asm GOTO timer1_isr _endasm
}
#pragma code

#pragma interrupt timer1_isr

void timer1_isr (void)
{
PIR1bits.TMR1IF = 0; // 清除中斷旗標
WriteTimer1(TMR1_VAL);
// 當將計數器觸發次數歸零寫入預設值
PORTD++; // 遞加PORTD
}

void main (void) {
PORTD = 0x00;
// 將PORTD清除關閉LED
TRISD = 0;
// 將TRISD設為0,PORTD設定為輸出
Init_TMR1(); // 初始化設定Timer1函式
INTCONbits.PEIE = 1; // 開啟周邊中斷功能
INTCONbits.GIE = 1; // 開啟全域中斷控制
while (1); // 無窮迴圈
}

void Init_TMR1 (void){

OpenTimer1( TIMER_INT_ON &T1_16BIT_RW &
T1_SOURCE_EXT&T1_PS_1_1 &
T1_OSC1EN_ON &T1_SYNC_EXT_ON );
WriteTimer1(TMR1_VAL); // 寫入預設值
PIR1bits.TMR1IF = 0; // 清除中斷旗標
}

Attach file:


Link only for registered users

發表於: 2009/4/7 21:26
頂部


關於Timer0中斷 pic18f4520
#30
初級會員
初級會員


報歉之前的問題有打錯更正
下述是根據微處理器原理與應用-C語言與PIC18微控制器這本書的範例,裡面的timer0是設定成溢位中斷,高低優先中斷關閉,中斷向量設在0x0018,但是這樣都沒辦法正確的進入中斷,如果設成0x0008便可以了,想請問為什麼會這樣呢?

//**********************************************************
//* Ex8_4_But_TMR0INT.c
//* 程式將偵測按鍵SW3的狀態,並遞加計數的內容。
//* 利用中斷功能,當計數數值超過四次反轉燈號。
//**********************************************************
#include <p18f4520.h> //納入微控制器定義檔
#include <timers.h> //納入計時器函式庫定義檔

// 結構位元定義
#pragma config OSC=HS, BOREN=OFF, BORV = 2, PWRT=ON, WDT=OFF, LVP=OFF

#define OSC_CLOCK 10 // 工作時序頻率定義
#define push_no 4 //預設觸發次數
#define count_val 256-push_no

//宣告函式原型
void Init_TMR0(void);
void timer0_isr (void);

//宣告並安排中斷執行程式記憶體位置
#pragma code low_vector=0x18
void low_interrupt (void)
{
_asm GOTO timer0_isr _endasm
}
#pragma code

#pragma interruptlow timer0_isr

void timer0_isr (void)
{
INTCONbits.TMR0IF = 0; // 清除中斷旗標
WriteTimer0(count_val);
PORTD=PORTD^0xFF; // 使用運算敘述將LED燈號反轉

}


void main (void) {

PORTD = 0x0F;// 將PORTD設定為b'00001111'
TRISD = 0; // 將TRISD設為0,PORTD設定為輸出
TRISAbits.TRISA4=1;// 將按鍵3所對應的RA4設定為輸入

Init_TMR0(); // 初始化設定Timer0函式

INTCONbits.PEIE = 1; // 開啟周邊中斷功能
INTCONbits.GIE = 1; // 開啟全域中斷控制

while (1) ; // 無窮迴圈
}

void Init_TMR0 (void){
OpenTimer0(TIMER_INT_ON &T0_8BIT &T0_SOURCE_EXT &T0_EDGE_RISE &T0_PS_1_1 );

WriteTimer0(count_val); // 相當TMR0L=count_val
INTCONbits.TMR0IF = 0; // 清除中斷旗標

}

發表於: 2009/4/4 2:43
頂部



« 1 2 (3) 4 »



:::

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... ]

教育訓練中心

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