2018.7
還沒有進入碩士研究生的生活,就已經被老師拉來給本科大一輔導單片機的入門課程…也是沒誰了…
在無聊之余自己也玩起以前玩的TI的MSP430系列,話說自己以前也用這系列搭過蜘蛛機器人,在機器人動起來的時候還是有點成就感的。
7.24
課程結束,本科生用G2搭了一個小車來循跡比賽,賽道是師兄花的,看上去還有點復雜。一些本科生也是厲害,兩個紅外傳感器就搞定地圖。估計這就是所謂的運氣和實力了。
在課程總結,和老師坐在一起,就感覺事情并沒有那么簡單。。。
嗯,開始套路我們準研一做循跡小車當復習單片機知識….話說,老師給我的是一種莫名的不能拒絕的感覺。所以…迷迷糊糊就答應下來了。
7.26
花了一天的時間把原來要求控速的小車接上紅外來改裝,按規則寫代碼(這里聲明,我的印象里,循跡的本質是,走完所有有可能的路線或者按邏輯來走而不是特定規則,這才叫循跡),雖然車還是左搖右擺的走,但也走通了,附上代碼,4紅外傳感。
主函數
#include "Motor.h"
void timer_init()
{
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
TA1CTL = TASSEL_2 + MC_1;
TA1CCR0 = T;
TA1CCTL1 = OUTMOD_7;
TA1CCTL2 = OUTMOD_7;
_EINT();
}
void GPIO_init(void)
{
P1DIR = 0x00;
P2DIR |= (BIT1 + BIT2 + BIT3 + BIT4);
P2OUT &= ~(BIT1+BIT3);
P2SEL |= (BIT2 + BIT4);
}
/* main.c*/
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
timer_init();
GPIO_init();
while(1)
{
switch(flag)
{
case 0:
mode_0();
break;
case 1:
mode_1();
break;
case 2:
mode_2();
break;
case 3:
mode_3();
break;
case 4:
mode_4();
break;
case 5:
mode_5();
break;
}
}
}
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
驅動函數
#ifndef Motor
#define Motor
#include "param.h"
#include "msp430.h"
#define CPU_F ((double)1000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
volatile int flag = 0;
volatile int mode5_flag = 0;
void Motor_L(float left)
{
LeftMotor_Forward
if(left<0)
{
LeftMotor_Back
left = -left;
}
LeftPWMOUT = left*T/100;
}
void Motor_R(float right)
{
RightMotor_Forward
if(right<0)
{
RightMotor_Back
right = -right;
}
RightPWMOUT = right*T/100;
}
void MotorSet(float L, float R)
{
Motor_L(L);
Motor_R(R);
}
void DriveMotor(float PIDout)
{
float left=BASIC+PIDout;
float right=BASIC-PIDout;
if(left>100)
left=100;
if(left<-100)
left=-100;
if(right>100)
right=100;
if(right<-100)
right=-100;
Motor_L(left);
Motor_R(right);//工作正常
}
void mode_0()
{
while(flag==0)
{
if((P1IN|0xf0)==0xff)//1111
MotorSet(70,68);
if((P1IN|0xf0)==0xfd)//1101
MotorSet(-100,100);
if((P1IN|0xf0)==0xfb)//1011**
MotorSet(100,-100);
if((P1IN|0xf0)==0xf3)//0011zuo
{
MotorSet(65,0);
delay_us(500000);
MotorSet(70,68);
}
if((P1IN|0xf0)==0xfc)//1100you
{
MotorSet(-20,70);
delay_us(500000);
MotorSet(70,68);
flag++;
}
}
}
void mode_1()
{
if((P1IN|0xf0)==0xff)//1111
MotorSet(70,68);
if((P1IN|0xf0)==0xfc)//1100zuo
MotorSet(70,68);
if((P1IN|0xf0)==0xf3)//0011
{
MotorSet(70,68);
flag++;
}
}
void mode_2()
{
if((P1IN|0xf0)==0xff)//1111
MotorSet(70,68);
if((P1IN|0xf0)==0xfc)//1100
{
MotorSet(-10,70);
delay_us(500000);
MotorSet(70,68);
}
if((P1IN|0xf0)==0xf3)//0011
{
MotorSet(60,0);
delay_us(500000);
MotorSet(70,68);
}
if((P1IN|0xf0)==0xf0)//0000
MotorSet(70,68);
if((P1IN|0xf0)==0xf9)//1001
{
MotorSet(0,0);
delay_us(5000000);//5s
MotorSet(-10,50);
flag++;
}
}
void mode_3()
{
if((P1IN|0xf0)==0xff)//1111
MotorSet(70,68);
if((P1IN|0xf0)==0xfc)//1100
{
MotorSet(-10,70);
delay_us(500000);
MotorSet(70,68);
}
if((P1IN|0xf0)==0xf3)//0011
{
flag++;
MotorSet(70,68);
}
}
void mode_4()
{
if((P1IN|0xf0)==0xff)//1111
MotorSet(70,68);
if((P1IN|0xf0)==0xfc)//1100
MotorSet(70,68);
if((P1IN|0xf0)==0xf3)//0011
{
flag++;
MotorSet(70,68);
}
if((P1IN|0xf0)==0xf0)//0000
{
MotorSet(100,-100);
delay_us(2000000);
MotorSet(70,68);
flag++;
}
}
void mode_5()
{
if((P1IN|0xf0)==0xff)//1111
MotorSet(70,68);
if((P1IN|0xf0)==0xf3)//0011
{
MotorSet(60,0);
delay_us(500000);
MotorSet(70,68);
}
if((P1IN|0xf0)==0xfc)//1100
{
MotorSet(-10,70);
delay_us(500000);
MotorSet(70,68);
mode5_flag++;
}
while(mode5_flag==2)
{
mode5_flag = 0;
flag = 0;
}
}
#endif
參數設置
#ifndef param
#define param
#define P 1
#define I 0.01
#define D 0
#define LeftMotor_Forward {P2OUT &= ~BIT1;}
#define LeftMotor_Back {P2OUT |= BIT1;}
#define RightMotor_Forward {P2OUT &= ~BIT3;}
#define RightMotor_Back {P2OUT |= BIT3;}
#define LeftPWMOUT TA1CCR1
#define RightPWMOUT TA1CCR2
#define F 10000
#define T (8000000/F)
#define BASIC 100
#endif
上一篇:官網中MSP430G2553數據表及用戶指南的簡單了解
下一篇:單片機MSP430入門--理論③--時鐘模塊-DCO和BCS寄存器
推薦閱讀
史海拾趣
Holmes Electronics Inc. 起初是一家小型電子元件制造商,專注于生產基礎電阻器和電容器。然而,隨著電子行業的快速發展,公司創始人意識到技術創新的重要性。他們投入大量資源進行研發,成功開發出一種新型的高精度溫度傳感器,這種傳感器能夠在極端環境下保持高精度,迅速被智能手機、醫療設備和工業自動化系統采用。這一技術創新不僅為公司贏得了市場份額,還奠定了Holmes Electronics在電子行業的技術領先地位。
隨著EnerChip技術的不斷完善和市場的認可,CYMBET公司開始積極拓展市場,與全球各地的合作伙伴建立了緊密的合作關系。例如,CYMBET與Digi-Key Corporation簽訂了全球經銷協議,通過Digi-Key的廣泛分銷網絡,EnerChip系列固態可充電薄膜電池及能量采集儲能模塊得以迅速進入全球市場。此外,CYMBET還與多家知名電子設備制造商建立了長期合作關系,共同開發新產品,推動電子行業的發展。
APLUS Products公司起源于XXXX年,當時電子行業正處于飛速發展的黃金時期。公司創始人憑借對電子技術的深厚理解和市場需求的敏銳洞察,決定專注于研發和生產高質量的電子產品。初期,公司面臨著資金短缺、技術難題和市場競爭等多重挑戰。然而,通過不斷的技術創新和產品優化,APLUS逐漸在市場中嶄露頭角。
得力公司在國內市場取得成功后,開始積極拓展海外市場。公司在全球建立了多個生產基地和創新研發中心,整合全球人才和資源,為用戶提供卓越的產品和服務。同時,得力還注重品牌本土化經營和國際化運營,努力融入當地市場和文化,贏得了全球客戶的信賴和認可。
得力公司在文具和打印機領域取得成功后,并未滿足于此,而是繼續尋求新的增長點。2016年,得力集團與余姚得力工具有限公司合資成立寧波得力工具有限公司,正式進入電動工具領域。得力憑借其在技術研發和品質控制方面的優勢,迅速在電動工具市場占據一席之地。特別是其自主研發的“紅芯”系列電動工具,憑借其高品質、高性價比的特點,贏得了用戶的廣泛好評。
完整德州儀器高性能模擬器件在大學生創新設計中的應用及選型指南 本帖最后由 paulhyde 于 2014-9-15 09:44 編輯 完整德州儀器高性能模擬器件在大學生創新設計中的應用及選型指南! … 查看全部問答∨ |
各位大蝦 我是大二學生 如何提高c語言編程能力(大一學過C) 大家好 我是大二學生 學習嵌入式 大一學過C語言 但學的一般 現在大二 想在學習C 但是 怎樣提高呢? 以前學的也就是 一些很簡單的 類似抄代碼的 如何才能明顯的提 ...… 查看全部問答∨ |
將程序下載到開發板上時,程序找不到 system.data.sqlserverce程序集? 在開發板已經裝上了相應的sqlce程序!!!! 請問在系統定制時是不是還得添加相應的數據庫鏈接文件????… 查看全部問答∨ |
請問怎么在無線網卡上編程?就是最一般的802.11a/b/g LAN.基本想法是這樣的:無線網卡在出廠默認的情況下肯定是寫有自己的路由算法的了,現在想在上面寫上自己設計的路由算法,并能成功實現用之,具體應該怎么做?需要用到什么編程平臺?要用到什 ...… 查看全部問答∨ |
Unable to connect to the device 有個問題解決不了啊~~~ 已經安裝了Microsoft ActiveSync而且用USB接口和Pocket PC已經連接上了可以把文件Copy到Pocket PC 上去; 可是我用上述點擊“Test”按鈕時就是連接不上Pocket PC,報錯為“Unable  ...… 查看全部問答∨ |
|
BHS-STM32-ISP-IAPV1.3半壺水工具系列...持續更新 BHS-STM32-ISP-IAP V1.3.rar (2.19 MB) 下載次數: 31 2011-2-27 10:37 在上一版本基礎上修改記錄 1. 增加查看開發板跳線設置說明 2.增加串口超級終端,調試串口程序更方便 半壺水圖片轉換工具 V1.0.rar (30.7 KB) ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 高通攜手中國“汽車朋友圈”亮相2025上海車展: 加速駕駛輔助普惠,推動艙駕創新升級
- 工業市場正在快速回暖,德州儀器如何重塑電力電子市場?
- 特斯拉:美國交付的Model Y/3電池包已實現100%美國生產
- 地平線與博世深化合作,攜手為多家車企提供輔助駕駛產品
- 強化中國市場戰略布局,德州儀器正靈活應對全球關稅挑戰
- Molex莫仕通過本地合作和創新加強支持中國汽車行業
- 貿澤開售Texas Instruments適用于高分辨率AR HUD的 全新DLP4620S-Q1 0.46"汽車數字微鏡器件
- ROHM推出高功率密度的新型SiC模塊,將實現車載充電器小型化!
- 用上車規級UFS 4.0,讓出行變得高效且可靠
- 車載測試技術解析:聚焦高帶寬、多通道同步采集與協議分析