VERSION0/TPF0TVersionnumberdetails Version 276 PRJFILEHEADER0TPF0TPrjFileHeaderZpercnt@ZordxZordy Targetfilestep1.c Targetpath%C:\myfiles\microchip\projects\astep1\ Templatefile)C:\WINDOWS\Desktop\picexp\templates\c.txt TargetdevicePIC16F84 TargetMimicDEFAULT Targetclock = PaletteCountSciCount Notes.Strings{\rtf1\ansi\deff0\deftab720{\fonttbl{\f0\fswiss MS Sans Serif;}{\f1\froman\fcharset2 Symbol;}{\f2\fswiss\fprq2 Arial;}{\f3\fswiss Arial;}{\f4\fswiss Arial;}{\f5\fmodern\fprq1 Courier New;}}{\colortbl\red0\green0\blue0;}=\deflang2057\pard\plain\f2\fs20\b Introduction\plain\f2\fs20 \par Demonstration of the 'Stepper motor MOSFET drive' sub-circuit. This sub-circuit can produce three different step patterns for a unipolar 6 or 8 wire stepper motor.\par .\par The target is a PIC16F84 running at 4Mhz.\par /\par \plain\f2\fs20\b Operation\plain\f2\fs20 g\par Drive stepper motor clock-wise 50 steps, then anti-clockwise 100 steps. Repeat for each step mode.\par &\par \plain\f2\fs20\b Application code \par \plain\f2\fs20 Below is the application code for this project. To use it, select and copy (ctr-insert) the code below and past it into a text editor and save as a 'C' file in your working directory. You may also need to change the build output path using 'Project | Options'\par \plain\f2\fs20\b \par \plain\f2\fs20 \par [\par \plain\f5\fs16 ///////////////////////////////////////////////////////////////////////L\par //// ASTEP1.C ////L\par //// ////L\par //// Demonstration of 'Stepper motor MOSFET drive' sub-circuit. ////L\par //// Performs stepper functions in 3 step modes. ////L\par //// More of the same sub-circuit can be added to produce a ////L\par //// multi axis stepper drive. ////L\par //// ////L\par //// This program is an example of how your application code is ////L\par //// is organised. Note the #include "astep1.c", this include ////L\par //// file was generated by QuickBuilder and contains all ////L\par //// driver code. ////L\par //// ////L\par //// This demo is intended for a PIC16F84. ////L\par //// Compiled using CCS 'C' visit www.quickbuilder.co.uk/qb/ccs ////L\par //// for more information. ////L\par ///////////////////////////////////////////////////////////////////////\par #include <16f84.H>\par "\par #fuses hs,nowdt,noprotect,put\par  \par #case\par \par #define PORTA 5 \par #define PORTB 6\par #define TRISA 0x85 \par #define TRISB 0x86\par \par \par #include "step1.c"\par \par \par #int_rtcc\par void RTCC_ISR()\par \{\par STEP_1DO();\par \}\par \par \par main() \{ \par 7\par // initialise sub-circuits and rtcc interrupts7\par //--------------------------------------------\par INIT_SUB_CIRCUITS();3\par setup_timer_0(RTCC_INTERNAL | RTCC_DIV_2);'\par enable_interrupts(INT_TIMER0);#\par enable_interrupts(GLOBAL);\par \par \par // main loop\par //----------\par while(1) \{ \par STEP_1SPEEDT = 50;\par D\par // step clock wise 50 steps followed by 1 seccond pause\par STEP_1DIR = 0;\par STEP_1STEPS = 50; \par while(STEP_1STEPS);\par delay_ms(1000);\par L\par // step anti-clock wise 100 steps followed by 0.5 seccond pause\par STEP_1DIR = -1;\par STEP_1STEPS = 100; \par while(STEP_1STEPS);\par delay_ms(3000); \par \par #\par // demo next step mode"\par if (++STEP_1MODE > 2)#\par STEP_1MODE =0;  \par \}\par \}\par \plain\f4\fs20 \par }TitleStepper motor MOSFET driveKeywordsstepper;motor;drive;MOSFET AltTemplate SCGENERIC0TPF0 tScGenericLibName4C:\Program Files\QuickBuilder\\data\C_UPDATE1202.libcctnameStepper motor MOSFET drive descriptionUnipolar 6-wire stepper motor MOSFET drive. Three step modes: half, full hi-torque & full lo-torque. direction and speed control.keywords+stepper;motor;uni-phase;drive;6-wire;MOSFETScTypeiocountrefnameSTEP_CctAsMetafile.Data X\aY6>0 EMF   XX  ``K@0 qiqi  & % 'z% V,PWZ\4pp^p4p% (   % (   & % '% +.% (   % ( 4& % % 6% ( & % 6% ( 44& % 6p4% ( 4& % 6p% ( pp& % 6p% ( p& % 6% ( & % 6% ( & % 64% ( 4& % 6p4% ( p& % 6% ( & % 6% ( & % 6% ( $ & % 6% (  RLZArial{{% TXiFvS@UU@LPQ12&% (    & % 'z% V,W\ pP ^P  p% (  % (    & % '% +  % (  % (   4& % % 6 % (    & % 6 % (    4& % 6P 4% (    & % 6P % (   P p& % 6 p% (   P & % 6 % (    & % 6 % (    & % 6 4% (    4& % 6P 4% (    p& % 6 % (    & % 6 % (   ` & % 6 % (    $ & % 6 % (  RLZArial{% TXFS@UU@ LPQ22&% (    & % 'z% V,W\ p0 ^0  p% (  % (    & % '% +  % (  % (   4& % % 6 % (   | & % 6 % (    4& % 60 4% (    & % 60 % (   0 p& % 6l p% (   0 & % 6l % (   l & % 6l % (   l & % 6l 4% (   l 4& % 60 4% (   l p& % 6l % (   l & % 6l % (   @ & % 6| % (   l $ & % 6l % (  RLZArial3}{;UUë;*{;QU0{; ¢3UG{;QU@*{;*hUM{;PV*@{;*UO`UUV*qUO% TXFS@UU@ LPQ32&% (    & % 'z% V,6W@\ p^ p% (  % (    & % '% +  % (  % (   4& % % 6 % (   \ & % 6 % (    4& % 64% (    & % 6% (   p& % 6Lp% (   & % 6L% (   L& % 6L% (   L& % 6L4% (   L4& % 64% (   Lp& % 6L% (   L& % 6L% (    & % 6\ % (   L$ & % 6L% (  RLZArial{;QU@*{;*hUM{;PV*@{;*UO`UUV*qUO{@P ~ % TXOF\S@UU@nLPQ42&% (   & % 6 % (   p & % 6 % (    & % 6 % (    & % 6 % (    & % 6 % (   P & % 6 % (   n & % 6 % (     & % 6  % (   l & % 6l % (   0 & % 6 % (   N & % 6 % (   f  & % 6r  % (   L & % 6L % (    & % 6 % (   . & % 6j % (   F & % 6R % (     & % 'z% V,_g% (  % (  & % % 6T% (   & % 6T% (  RL<ArialPRH:s% TU$^@UU@KQ L`T1 ______ % (    & % 'z% V,sz < $  % (  % (   & % % 6T$ % (   < & % 6T$ % (  RL<Arial{{{{% Th$q@UU@K L`T2 ______ % (    & % 'z% V,    % (  % (   & % % 6T % (    & % 6T % (  RL<Arial{{{{% T{$@UU@KA L`T3 ______ % (    & % 'z% V, ,   % (  % (   & % % 6T % (   , & % 6T % (  RL<Arial{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{% T$@UU@K L`T4 ______ % (  & % U,Zcp*p6% (   & % U,ZcTTpHp6% (   & % U,ZcTTpfpr% (   & % U,Zc ppr% (   & % U,Z cpp% (   & % U,Zcpp% (   & % U,Zcpp% (   & % U,Zc pp% (   & % 6% (   D& % 6% (  RLZArial  & %'% +.% (   % 4& % % TXLY@UU@LP1A&2% (  & % U, n P *P 6% (   & % U, Tn TP HP 6% (   & % U, Tn TP fP r% (   & % U,  n P P r% (   & % U,  n P P % (   & % U, n P P % (   & % U, n P P % (   & % U,  n P P % (    & % 6 % (    D& % 6 % (  RLZArial% TXiFvS@UU@LPQ12&% (    & % % TX@UU@ LP1B%,% (  & % U,l N 0 *0 6% (   & % U,l TN T0 H0 6% (   & % U,l TN T0 f0 r% (   & % U, l N 0 0 r% (   & % U, l N 0 0 % (   & % U,l N 0 0 % (   & % U,l N 0 0 % (   & % U, l N 0 0 % (   l & % 6l % (   l D& % 6l % (  RLZArial% (    & % 6 % (   & % 6 % TX@UU@ LP2A&2% (  & % U,@JL.*6% (   & % U,@JLT.TH6% (   & % U,@JLT.Tfr% (   & % U,@J L.r% (   & % U,@ JL.% (   & % U,@JL.% (   & % U,@JL.% (   & % U,@J L.% (   L& % 6L% (   LD& % 6L% (  RLZArial  0 p&% 6l p% (   0 & % 6l % (  % TX2>@UU@ LP2B%,% (    & % 'z% V,*= DTD% (  % (  DT& % % 6T% (   & % 6% (   & % 6T% (  RLZAriall % (  RLZArial3}{;UUë;*{;QU0{; ¢3UG{;QU@*{;*hUM{% TX(@UU@LPD1+&% (    & % 'z% V, `   T` % (  % (  ` T& % % 6 T% (    & % 6 % (    & % 6 T% (  RLZArial \ & % 6 % (    4& %64% (  % TXr~@UU@ LPD2+&% (    & % 'z% V, @  | T@ % (  % (  @ T& % % 6 T% (   | & % 6| % (   | & % 6| T% (  RLZArial% (   L& % 6L% (    & % 6\ %% TX@UU@ LPD3+&% (    & % 'z% V,-   \ T % (  % (   T& % % 6 T% (   \ & % 6\ % (   \ & % 6\ T% (  RLZArial % (   & % 6 % (    & % 6% TX @UU@ LPD4+&% (    & % '% *a Yt l% (  % (    & % '% *N Ya l% (  % (    & % '% * Y l% (  % (    & % '% * r % (  % (    & % '% *a rt % (  % (    & % '% *BrU% (  % (    & % '% *r% (  % (    & % '% *Yl% (  % (    & % '% * Y( l% (  % (    & % '% * Y l% (  % (   & % % 6 t% (    t& % 6" t% (  RL<Arial% (   & % 'z% V,sz < $ % (  % ( % TX@UU@ LPV+ % (    & % '0% *  % (  % ( % RL<Arial{{% Th$q@UU@K L% T(@UU@ LdD1-4: 1N4001& &% ( RL<Arial % (   & % % 6T % (    & % 6T% T F9O@UU@ LdQ1-4: BUZ10% &% (  @ &$% 6@ % (     & % 'z% V," ^ @ " % (  % ( % RL<Arial'z% V, ,   % (  % (   & % % 6T % % T Y@UU@! LhTARGET ______ %& % (  & % 6p% (   $ & % 6% (    & % 6` % (    & % 6 % (  RL<Arial   & % U,ZcTTpHp6% (   &% U,ZcTTpf% TT=U@^@UU@RLPg% ( RL<Arial% U,Z cp% (   & % U,Zcpp% (   &% TTZ=]F@UU@pLPd% ( RL<Arial & 6% (   D& % 6% (  RLr% TTZh]q@UU@pLPs% ( RL<Arial% 4& % % TXLY@UU@LP1A&2% ( % Te@UU@L1A,1B: STEP. MOTOR PHASE A   +&&% %  % ( RL<Arial% (   & % U,  n P P r% (    % U, % Te@UU@ L2A,2B: STEP. MOTOR PHASE B   +&&% %  % (  &$% W(M@ @ 4% (   & % W$cvc$  % (   & % W$v $ % (   & % W$vl $ l % (   & % W$JvJL$ L % (   & % W$c3cT% (   & % W,cv@   $ T$ % (   & % W,c` $ $ T % (   & % W,c    T % (   & % W(| | dl d% (   & % W$l l d% (   & % W$##\ \ d% (   & % W(#JLLd\ d% (   & % W(  d d% (   & % W$  d% (   & % W(3   % (   & % W$*3 D % (   & % W$3=  % (   & % W$*3l Dl % (   & % W$3=l l % (   & % W(3| | l % (   & % W(#J3\ \ L% (   & % W$J*J3LDL% (   & % W$J3J=LL% (   & % W$c*c3D% (   & % W$c3c=% (   & % W(3c3% (   & % W$ccd% (   & % W(3cdd% (   & % W$cvd$ d% (   & % W$v d$ d% (   & % W$l d d% (   & % W$#\ d d% (   & % W(v$ d$  % (   & % W( d  % (   & % W$  % (   SwModuleAsStrings.Strings//
//
// steps (default 100). Eg if STEP_DO() is called every 1ms, a6// value of 100 would cause a step change every 100ms.//>// STEP_MODE : 0=half step(default), 1=full step hi torque,// 2=full step low torque.//:// Example: Move clockwise 20 steps. This example assumes @// STEP_DO() is called at regular intervals by a timer interrupt // routine.//9// STEP_MODE = 1; // single step, hi-torque/// STEP_DIR = 0; // rotate right+// STEP_STEPS = 20; // 20 steps#if 0 // 1=debug#define PORT_P0_ PORTB#define PORT_P1_ PORTB#define PORT_P2_ PORTB#define PORT_P3_ PORTB#define TRIS_P0_ TRISB#define TRIS_P1_ TRISB#define TRIS_P2_ TRISB#define TRIS_P3_ TRISB#define _1A_ 0#define _1B_ 1#define _2A_ 2#define _2B_ 3#endif6// --------------- modified by script --------------//#define P0__ PORT_P0_, _1A_#define P1__ PORT_P1_, _1B_#define P2__ PORT_P2_, _2A_#define P3__ PORT_P3_, _2B_#define TRISP0__ TRIS_P0_, _1A_#define TRISP1__ TRIS_P1_, _1B_#define TRISP2__ TRIS_P2_, _2A_#define TRISP3__ TRIS_P3_, _2B_6//--------------------------------------------------// // variablessigned int STEP_DIR = 0;long STEP_STEPS = 0;BYTE STEP_SPEEDT = 100;BYTE STEP_MODE = 0;BYTE pattern_idx__;BYTE skip__= 0;=const char pattern__[] = { 0x1,0x3,0x2,0x6,0x4,0xc,0x8,0x9 };//*********************void STEP_ONESTEP(void){ BYTE ptn; signed int i; $ // finish if no more steps to do if ( STEP_STEPS == 0) return; // get direction inc STEP_STEPS--;  if (bit_test(STEP_DIR,0) ) i=1; else i=-1; 4 pattern_idx__ += i; // half step  // step mode 1 & 2 ; if ( STEP_MODE ) { // step modes 1 & 24 pattern_idx__ +=i; // full step7 pattern_idx__ &=0xfe; // even 1-phase6 if ( bit_test( STEP_MODE,0) ) // step mode 18 pattern_idx__ |=1; // odd 2-phase } // get pattern pattern_idx__ &= 0x7;# ptn = pattern__[pattern_idx__]; // output pattern if (bit_test(ptn,0)) bit_set( *P0__); else bit_clear( *P0__); if (bit_test(ptn,1)) bit_set( *P1__); else bit_clear( *P1__); if (bit_test(ptn,2)) bit_set( *P2__); else bit_clear( *P2__); if (bit_test(ptn,3)) bit_set( *P3__); else bit_clear( *P3__);}//*********************void STEP_DO(void) { if ( skip__ != 0 ) { skip__--; return; }> skip__ = STEP_SPEEDT; // reload skip counter STEP_ONESTEP();}//*********************void STEP_INIT(){ bit_clear(*TRISP0__); bit_clear(*TRISP1__); bit_clear(*TRISP2__); bit_clear(*TRISP3__); bit_clear(*P0__); bit_clear(*P1__); bit_clear(*P2__); bit_clear(*P3__);} ///section>//
PartCountPreScale? CCTOBJ0TTPF0tcctobjscale7?qordxqordyIoSelectArray.Strings-16789-1-1-1 headertextSTEP_1parentfrmmain.pnSheettopEleft`cctnameStepper motor MOSFET driverefnameSTEP_1 Annotated swincluded ScGeneric.OwnerIDEnabled SelectSheetNumPropertyValue.Strings-1-1-1-1-1-1-1-1