![](/media/cache/profiles/e5815151957be36ad2085b7a1a02c5cc.jpg.50x50_q85.jpg)
Controlor for Humanoid. Walking trajectory generator, sensor reflection etc.
Dependencies: Adafruit-PWM-Servo-Driver MPU6050 RS300 mbed
Diff: Source3.cpp
- Revision:
- 2:8a40834788ba
- Parent:
- 1:5c2e40445778
- Child:
- 3:84e5335fab91
diff -r 5c2e40445778 -r 8a40834788ba Source3.cpp --- a/Source3.cpp Wed Aug 29 15:47:51 2012 +0000 +++ b/Source3.cpp Thu Aug 30 02:00:58 2012 +0000 @@ -4,28 +4,34 @@ #include "LPC17xx.h" #include "mbed.h" -const int SRV_PERIOD = 2500 - 1;//���/8 -const int SRV_MAX_DUTY = 2100 - 1;//�f���[�e�B�[�ő�l -const int SRV_MIN_DUTY = 900 - 1;//�f���[�e�B�[�ŏ��l +const uint32_t SRV_PERIOD = 2500 - 1;//���/8 +const uint32_t SRV_MAX_DUTY = 2100 - 1;//�f���[�e�B�[�ő�l +const uint32_t SRV_MIN_DUTY = 900 - 1;//�f���[�e�B�[�ŏ��l + +const uint8_t SRV_IDX_SHIFT = 3;//74HC238�C���f�b�N�X�̓�͒[�q��(A,B,C) +const uint8_t SRV_IDX_NUM = 1 << SRV_IDX_SHIFT;//�C���f�b�N�X�̐�(8) +const uint8_t SRV_IDX_MASK = SRV_IDX_NUM - 1;//�w��ch�̉�3bit����}�X�N���邽�߂̂�� +const uint8_t SRV_BANK_NUM = 3;//PWM���̖{�� +const uint8_t SRV_CH_NUM = SRV_IDX_NUM * SRV_BANK_NUM;//����”\�ȃT�[�{���[�^�� -const int SRV_IDX_SHIFT = 3;//74HC238�C���f�b�N�X�̓�͒[�q��(A,B,C) -const int SRV_IDX_NUM = 1 << SRV_IDX_SHIFT;//�C���f�b�N�X�̐�(8) -const int SRV_IDX_MASK = SRV_IDX_NUM - 1;//�w��ch�̉�3bit����}�X�N���邽�߂̂�� -const int SRV_BANK_NUM = 3;//PWM���̖{�� -const int SRV_CH_NUM = SRV_IDX_NUM * SRV_BANK_NUM;//����”\�ȃT�[�{���[�^�� +volatile uint8_t SRV_Idx = 0;//�T�[�{�؂�ւ��p�̃J�E���^ +volatile uint32_t SRV_dutyTable[SRV_BANK_NUM][SRV_IDX_NUM];//�f���[�e�B�[�l -volatile short int SRV_Idx = 0;//�T�[�{�؂�ւ��p�̃J�E���^ -volatile short int SRV_dutyTable[SRV_BANK_NUM][SRV_IDX_NUM];//�f���[�e�B�[�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} +//}; -const short int 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} +const uint32_t SRV_PWMTable[SRV_BANK_NUM][SRV_IDX_NUM]={ +{0,2500,0,2500,0,2500,0,2500}, +{0,0,2500,2500,0,0,2500,2500}, +{0,0,0,0,2500,2500,2500,2500} }; void Init_PWM(void); -void SetDuty(short int ch, short int duty); +void SetDuty(uint8_t ch, uint32_t duty); #endif //PWM_H_2012_08_28_ @@ -48,21 +54,15 @@ } void PWM1_IRQHandler (void) { - LPC_PWM1->TCR = (1 << 1);//reset - LPC_PWM1->PR = SystemCoreClock / 4 / 1000000 - 1; // prescale 1000kHz(1us����)�����񂲂ƂɃ^�C�}�J�E���^��J�E���g�A�b�v���邩�Ƃ����ݒ� - LPC_PWM1->CTCR = 0; - LPC_PWM1->MCR |= (1 << 1)|(1 << 0); // MR0R, MR0 + LPC_PWM1->LER |= 0x7E; - LPC_PWM1->MR1 = SRV_PWMTable[0][SRV_Idx]; + LPC_PWM1->MR1 = 500;//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->TCR = (1 << 0)|(1 << 3); // enable - LPC_PWM1->PCR |= (0x3F << 9);//1-6 pwm - LPC_PWM1->IR |= (1<<0); // reset PWMMR0 flag SRV_Idx++; @@ -104,7 +104,7 @@ __enable_irq(); } -void SetDuty(short int ch, short int duty){ +void SetDuty(uint8_t ch, uint32_t duty){ if(ch >= SRV_CH_NUM){ return; }else if(duty < SRV_MIN_DUTY){