Controlor for Humanoid. Walking trajectory generator, sensor reflection etc.

Dependencies:   Adafruit-PWM-Servo-Driver MPU6050 RS300 mbed

Files at this revision

API Documentation at this revision

Comitter:
syundo0730
Date:
Sat Sep 15 06:36:13 2012 +0000
Parent:
3:84e5335fab91
Child:
6:fae1b8c01b49
Commit message:
opp pre

Changed in this revision

PWM/pwm.cpp Show annotated file Show diff for this revision Revisions of this file
PWM/pwm.h Show annotated file Show diff for this revision Revisions of this file
Source3.cpp Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PWM/pwm.cpp	Sat Sep 15 06:36:13 2012 +0000
@@ -0,0 +1,57 @@
+#include "pwm.h"
+
+void Init_PWM(void) {
+    LPC_PINCON->PINSEL3 &= ~(3 << 4); // GPIO (00)
+    LPC_GPIO1->FIODIR |= (1 << 18);  // output
+    
+    LPC_PINCON->PINSEL4 |= 0x555; // GPIO (00)
+    LPC_GPIO2->FIODIR |= 0x3F;  // output
+
+    LPC_SC->PCLKSEL0 &= ~(3 << 12); // PCLK_TIMER0 ck/4 (00)
+    LPC_SC->PCONP |= (1 << 6); // PCPWM1
+    LPC_PWM1->TCR = (1 << 1);//reset
+    LPC_PWM1->PR = SystemCoreClock / 4 / 1000000 - 1; // prescale 1000kHz(1us&#65533;&#65533;&#65533;&#65533;)&#65533;&#65533;&#65533;&#65533;&#65533;&#273538;&#386;&#579;^&#65533;C&#65533;}&#65533;J&#65533;E&#65533;&#65533;&#65533;^&#65533;&#65533;J&#65533;E&#65533;&#65533;&#65533;g&#65533;A&#65533;b&#65533;v&#65533;&#65533;&#65533;&#37033;&#65533;&#386;&#65533;&#65533;&#65533;&#65533;&#1874;&#65533;
+    LPC_PWM1->CTCR = 0;
+    LPC_PWM1->MCR |= (1 << 1)|(1 << 0); // MR0R, MR0
+
+    LPC_PWM1->MR0 = SRV_PERIOD; // PWM(74HC238
+    
+    LPC_PWM1->IR |= (1<<0);//reset PWMMR0 flag
+
+    NVIC_EnableIRQ(PWM1_IRQn);//enable
+
+    LPC_PWM1->TCR = (1 << 0)|(1 << 3); // enable
+    LPC_PWM1->PCR |= (0x3F << 9);//1-6 pwm
+
+    __enable_irq();
+}
+
+void SetDuty(uint8_t ch, uint32_t duty){
+    if(ch >= SRV_CH_NUM){
+        return;
+    }else if(duty < SRV_MIN_DUTY){
+        duty = SRV_MIN_DUTY;
+    }else if(duty > SRV_MAX_DUTY){
+        duty = SRV_MAX_DUTY;
+    }
+    SRV_dutyTable[ch >> SRV_IDX_SHIFT][ch & SRV_IDX_MASK] = duty;
+}
+
+void PWM1_IRQHandler (void) {
+    LPC_PWM1->MR1 = SRV_PWMTable[0][SRV_Idx];
+    LPC_PWM1->MR2 = SRV_PWMTable[1][SRV_Idx];
+    LPC_PWM1->MR3 = SRV_PWMTable[2][SRV_Idx];
+    LPC_PWM1->MR4 = SRV_dutyTable[0][SRV_Idx];
+    LPC_PWM1->MR5 = SRV_dutyTable[1][SRV_Idx];
+    LPC_PWM1->MR6 = SRV_dutyTable[2][SRV_Idx];
+    
+    LPC_PWM1->LER |= 0x7E;
+    
+    LPC_PWM1->IR |= (1<<0); // reset PWMMR0 flag
+    
+    SRV_Idx++;
+
+    if(SRV_Idx >= SRV_IDX_NUM){
+        SRV_Idx = 0;
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PWM/pwm.h	Sat Sep 15 06:36:13 2012 +0000
@@ -0,0 +1,40 @@
+#ifndef PWM_H_2012_08_28_
+#define PWM_H_2012_08_28_
+
+#include "LPC17xx.h"
+#include "mbed.h"
+
+class PWM {
+  private:
+    const uint32_t SRV_PERIOD = 2500 - 1;
+    const uint32_t SRV_MAX_DUTY = 2100 - 1;
+    const uint32_t SRV_MIN_DUTY = 900 - 1;
+
+    const uint8_t SRV_IDX_SHIFT = 3;//74HC238(A,B,C)
+    const uint8_t SRV_IDX_NUM = 1 << SRV_IDX_SHIFT;
+    const uint8_t SRV_IDX_MASK = SRV_IDX_NUM - 1;
+    const uint8_t SRV_BANK_NUM = 3;//PWM
+    const uint8_t SRV_CH_NUM = SRV_IDX_NUM * SRV_BANK_NUM;
+
+  public:
+    void Init_PWM(void);
+    void SetDuty(uint8_t ch, uint32_t duty);
+}
+volatile uint8_t SRV_Idx = 0;
+volatile uint32_t SRV_dutyTable[SRV_BANK_NUM][SRV_IDX_NUM];
+
+const uint32_t SRV_PWMTable[SRV_BANK_NUM][SRV_IDX_NUM]={
+{0,SRV_PERIOD,0,SRV_PERIOD,0,SRV_PERIOD,0,SRV_PERIOD},
+{0,0,SRV_PERIOD,SRV_PERIOD,0,0,SRV_PERIOD,SRV_PERIOD},
+{0,0,0,0,SRV_PERIOD,SRV_PERIOD,SRV_PERIOD,SRV_PERIOD}
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+    void PWM1_IRQHandler();
+#ifdef __cplusplus
+}
+#endif
+
+#endif  //PWM_H_2012_08_28_
\ No newline at end of file
--- a/Source3.cpp	Thu Aug 30 12:41:50 2012 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,110 +0,0 @@
-#ifndef PWM_H_2012_08_28_
-#define PWM_H_2012_08_28_
-
-#include "LPC17xx.h"
-#include "mbed.h"
-
-const uint32_t SRV_PERIOD = 2500 - 1;//&#65533;&#65533;&#65533;/8
-const uint32_t SRV_MAX_DUTY = 2100 - 1;//&#65533;f&#65533;&#65533;&#65533;[&#65533;e&#65533;B&#65533;[&#65533;&#337;&#65533;l
-const uint32_t SRV_MIN_DUTY = 900 - 1;//&#65533;f&#65533;&#65533;&#65533;[&#65533;e&#65533;B&#65533;[&#65533;&#335;&#65533;&#65533;l
-
-const uint8_t SRV_IDX_SHIFT = 3;//74HC238&#65533;C&#65533;&#65533;&#65533;f&#65533;b&#65533;N&#65533;X&#65533;&#787;&#65533;&#850;[&#65533;q&#65533;&#65533;(A,B,C)
-const uint8_t SRV_IDX_NUM = 1 << SRV_IDX_SHIFT;//&#65533;C&#65533;&#65533;&#65533;f&#65533;b&#65533;N&#65533;X&#65533;&#784;&#65533;(8)
-const uint8_t SRV_IDX_MASK = SRV_IDX_NUM - 1;//&#65533;w&#65533;&#65533;ch&#65533;&#777;&#65533;3bit&#65533;&#65533;&#65533;&#65533;}&#65533;X&#65533;N&#65533;&#65533;&#65533;&#37053;&#65533;&#1986;&#770;&#65533;&#65533;
-const uint8_t SRV_BANK_NUM = 3;//PWM&#65533;&#65533;&#65533;&#790;{&#65533;&#65533;
-const uint8_t SRV_CH_NUM = SRV_IDX_NUM * SRV_BANK_NUM;//&#65533;&#65533;&#65533;&#65533;&#148;\&#65533;&#515;T&#65533;[&#65533;{&#65533;&#65533;&#65533;[&#65533;^&#65533;&#65533;
-
-volatile uint8_t SRV_Idx = 0;//&#65533;T&#65533;[&#65533;{&#65533;&#1538;&#65533;&#1410;&#65533;&#65533;p&#65533;&#771;J&#65533;E&#65533;&#65533;&#65533;^
-volatile uint32_t SRV_dutyTable[SRV_BANK_NUM][SRV_IDX_NUM];//&#65533;f&#65533;&#65533;&#65533;[&#65533;e&#65533;B&#65533;[&#65533;l
-
-const uint32_t SRV_PWMTable[SRV_BANK_NUM][SRV_IDX_NUM]={
-{0,SRV_PERIOD,0,SRV_PERIOD,0,SRV_PERIOD,0,SRV_PERIOD},
-{0,0,SRV_PERIOD,SRV_PERIOD,0,0,SRV_PERIOD,SRV_PERIOD},
-{0,0,0,0,SRV_PERIOD,SRV_PERIOD,SRV_PERIOD,SRV_PERIOD}
-};
-
-void Init_PWM(void);
-void SetDuty(uint8_t ch, uint32_t duty);
-
-#endif  //PWM_H_2012_08_28_
-
-#ifdef __cplusplus
-extern "C" {
-    void PWM1_IRQHandler();
-}
-#endif
-
-int main(void) {
-    
-    for(int i = 0; i < SRV_CH_NUM; i++)
-    {
-        SetDuty(i, (SRV_MAX_DUTY + SRV_MIN_DUTY) / 2);
-    }
-    
-    Init_PWM();
-    
-    while (1);
-}
-
-void PWM1_IRQHandler (void) {
-    
-    LPC_PWM1->MR1 = SRV_PWMTable[0][SRV_Idx];
-    LPC_PWM1->MR2 = SRV_PWMTable[1][SRV_Idx];
-    LPC_PWM1->MR3 = SRV_PWMTable[2][SRV_Idx];
-    LPC_PWM1->MR4 = SRV_dutyTable[0][SRV_Idx];
-    LPC_PWM1->MR5 = SRV_dutyTable[1][SRV_Idx];
-    LPC_PWM1->MR6 = SRV_dutyTable[2][SRV_Idx];
-    
-    LPC_PWM1->LER |= 0x7E;
-    
-    LPC_PWM1->IR |= (1<<0); // reset PWMMR0 flag
-    
-    SRV_Idx++;
-
-    if(SRV_Idx >= SRV_IDX_NUM){
-        SRV_Idx = 0;
-    }
-}
-
-void Init_PWM(void) {
-    LPC_PINCON->PINSEL3 &= ~(3 << 4); // GPIO (00)
-    LPC_GPIO1->FIODIR |= (1 << 18);  // output
-    
-    LPC_PINCON->PINSEL4 |= 0x555; // GPIO (00)
-    LPC_GPIO2->FIODIR |= 0x3F;  // output
-
-    LPC_SC->PCLKSEL0 &= ~(3 << 12); // PCLK_TIMER0 ck/4 (00)
-    LPC_SC->PCONP |= (1 << 6); // PCPWM1
-    LPC_PWM1->TCR = (1 << 1);//reset
-    LPC_PWM1->PR = SystemCoreClock / 4 / 1000000 - 1; // prescale 1000kHz(1us&#65533;&#65533;&#65533;&#65533;)&#65533;&#65533;&#65533;&#65533;&#65533;&#273538;&#386;&#579;^&#65533;C&#65533;}&#65533;J&#65533;E&#65533;&#65533;&#65533;^&#65533;&#65533;J&#65533;E&#65533;&#65533;&#65533;g&#65533;A&#65533;b&#65533;v&#65533;&#65533;&#65533;&#37033;&#65533;&#386;&#65533;&#65533;&#65533;&#65533;&#1874;&#65533;
-    LPC_PWM1->CTCR = 0;
-    LPC_PWM1->MCR |= (1 << 1)|(1 << 0); // MR0R, MR0
-
-    LPC_PWM1->MR0 = SRV_PERIOD; // PWM(74HC238&#65533;&#65533;G1)&#65533;&#65533;&#65533;2500us
-    //LPC_PWM1->MR1 = SRV_MAX_DUTY;//SRV_PERIOD; // &#65533;&#1538;&#65533;&#1410;&#65533;&#65533;&#65533;&#65533;(74HC238&#65533;&#65533;A)1
-    //LPC_PWM1->MR2 = SRV_MAX_DUTY;//SRV_PERIOD; // &#65533;&#1538;&#65533;&#1410;&#65533;&#65533;&#65533;&#65533;(74HC238&#65533;&#65533;B)
-    //LPC_PWM1->MR3 = SRV_MAX_DUTY;//SRV_PERIOD; // &#65533;&#1538;&#65533;&#1410;&#65533;&#65533;&#65533;&#65533;(74HC238&#65533;&#65533;C)
-    //LPC_PWM1->MR4 = SRV_MAX_DUTY;//(SRV_MAX_DUTY + SRV_MIN_DUTY) / 2; //PWM(74HC238&#65533;&#65533;G1)&#65533;f&#65533;&#65533;&#65533;[&#65533;e&#65533;B&#65533;[(&#65533;j&#65533;&#65533;&#65533;[&#65533;g&#65533;&#65533;&#65533;&#65533;)
-    //LPC_PWM1->MR5 = SRV_MAX_DUTY;//(SRV_MAX_DUTY + SRV_MIN_DUTY) / 2;
-    //LPC_PWM1->MR6 = SRV_MAX_DUTY;//(SRV_MAX_DUTY + SRV_MIN_DUTY) / 2;
-
-    LPC_PWM1->IR |= (1<<0);//reset PWMMR0 flag
-
-    NVIC_EnableIRQ(PWM1_IRQn);//enable
-
-    LPC_PWM1->TCR = (1 << 0)|(1 << 3); // enable
-    LPC_PWM1->PCR |= (0x3F << 9);//1-6 pwm
-
-    __enable_irq();
-}
-
-void SetDuty(uint8_t ch, uint32_t duty){
-    if(ch >= SRV_CH_NUM){
-        return;
-    }else if(duty < SRV_MIN_DUTY){
-        duty = SRV_MIN_DUTY;
-    }else if(duty > SRV_MAX_DUTY){
-        duty = SRV_MAX_DUTY;
-    }
-    SRV_dutyTable[ch >> SRV_IDX_SHIFT][ch & SRV_IDX_MASK] = duty;
-}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sat Sep 15 06:36:13 2012 +0000
@@ -0,0 +1,16 @@
+#include "pwm.h"
+
+int main(void) {
+    
+    for(int i = 0; i < SRV_CH_NUM; i++)
+    {
+        SetDuty(i, (SRV_MAX_DUTY + SRV_MIN_DUTY) / 2);
+    }
+    
+    Init_PWM();
+    
+    while (1);
+}
+
+
+